local $xxx ||= $yyy applying ||= on a new initialized variable is wrong xxx(!my $xxx) applying not on a new initialized variable is wrong xxx(!our $xxx) $1 =~ s/xxx/yyy/ do not modify the result of a match (eg: $1) $xxx[1, 2] you must give only one argument $xxx[] you must give one argument my $_x = 'xxx' if $xxx; replace "my $foo = ... if " with "my $foo = && ..." $xxx or my $_x = 'xxx'; replace " or my $foo = ..." with "my $foo = ! && ..." '' || 'xxx' || ... is the same as ... if ($xxx = '') {} are you sure you did not mean "==" instead of "="? N("xxx$yyy") don't use interpolated translated string, use %s or %d instead if ($xxx && $yyy = xxx()) {} invalid lvalue 1 + 2 >> 3 missing parentheses (needed for clarity) $xxx ? $yyy = 1 : $zzz = 2; missing parentheses (needed for clarity) invalid lvalue N_("xxx") . 'yyy' N_("xxx") . "yyy" is dumb since the string "xxx" will never get translated join(@l) first argument of join() must be a scalar join(',', 'foo') join('...', $foo) is the same as $foo if_($xxx) not enough parameters push @l you must give some arguments to push push $xxx, 1 push is expecting an array pop $xxx pop is expecting an array and nothing else my (@l2, $xxx) = @l; @l2 takes all the arguments, $xxx is undef in any case $bad undeclared variable $bad { my $a } unused variable $a my $xxx; yyy($xxx); my $xxx; redeclared variable $xxx { my $xxx; $xxx = 1 } variable $xxx assigned, but not read $a undeclared variable $a use bad; can't find package bad use pkg3 ':bad'; package pkg3 doesn't export tag :bad bad(); unknown function bad use pkg3 ':missing_fs'; name &f is not defined in package pkg3 f(); name &f0 is not defined in package pkg3 use pkg3 'f'; name &f is not defined in package pkg3 f();