op.c AOK
- "my" variable %s masks earlier declaration in same scope
- my $x;
- my $x ;
-
- Variable "%s" may be unavailable
- sub x {
- my $x;
- sub y {
- $x
- }
- }
-
- Variable "%s" will not stay shared
- sub x {
- my $x;
- sub y {
- sub { $x }
- }
- }
-
Found = in conditional, should be ==
1 if $a = 1 ;
$a ;
"abc"
+ Useless use of sort in scalar context
+ my $x = sort (2,1,3);
+
Applying %s to %s will act on scalar(%s)
my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ;
@a =~ /abc/ ;
fred() ; sub fred ($$) {}
- Use of "package" with no arguments is deprecated
- package;
-
Package `%s' not found (did you use the incorrect case?)
+ Use of /g modifier is meaningless in split
+
+ Possible precedence problem on bitwise %c operator [Perl_ck_bitop]
+
Mandatory Warnings
------------------
Prototype mismatch: [cv_ckproto]
sub fred() ;
sub fred($) {}
- %s never introduced [pad_leavemy] TODO
Runaway prototype [newSUB] TODO
oops: oopsAV [oopsAV] TODO
oops: oopsHV [oopsHV] TODO
-
__END__
# op.c
-use warnings 'misc' ;
-my $x ;
-my $x ;
-no warnings 'misc' ;
-my $x ;
-EXPECT
-"my" variable $x masks earlier declaration in same scope at - line 4.
-########
-# op.c
-use warnings 'closure' ;
-sub x {
- my $x;
- sub y {
- $x
- }
- }
-EXPECT
-Variable "$x" will not stay shared at - line 7.
-########
-# op.c
-no warnings 'closure' ;
-sub x {
- my $x;
- sub y {
- $x
- }
- }
-EXPECT
-
-########
-# op.c
-use warnings 'closure' ;
-sub x {
- our $x;
- sub y {
- $x
- }
- }
-EXPECT
-
-########
-# op.c
-use warnings 'closure' ;
-sub x {
- my $x;
- sub y {
- sub { $x }
- }
- }
-EXPECT
-Variable "$x" may be unavailable at - line 6.
-########
-# op.c
-no warnings 'closure' ;
-sub x {
- my $x;
- sub y {
- sub { $x }
- }
- }
-EXPECT
-
-########
-# op.c
use warnings 'syntax' ;
1 if $a = 1 ;
no warnings 'syntax' ;
eval { getgrgid 1 }; # OP_GGRGID
eval { getpwnam 1 }; # OP_GPWNAM
eval { getpwuid 1 }; # OP_GPWUID
+prototype "foo"; # OP_PROTOTYPE
EXPECT
Useless use of repeat (x) in void context at - line 3.
Useless use of wantarray in void context at - line 5.
Useless use of getgrgid in void context at - line 51.
Useless use of getpwnam in void context at - line 52.
Useless use of getpwuid in void context at - line 53.
+Useless use of subroutine prototype in void context at - line 54.
+########
+# op.c
+use warnings 'void' ; close STDIN ;
+my $x = sort (2,1,3);
+no warnings 'void' ;
+$x = sort (2,1,3);
+EXPECT
+Useless use of sort in scalar context at - line 3.
########
# op.c
no warnings 'void' ; close STDIN ;
eval { getgrgid 1 }; # OP_GGRGID
eval { getpwnam 1 }; # OP_GPWNAM
eval { getpwuid 1 }; # OP_GPWUID
+prototype "foo"; # OP_PROTOTYPE
EXPECT
########
# op.c
use warnings 'void' ;
"abc"; # OP_CONST
7 ; # OP_CONST
+5 || print "bad\n"; # test OPpCONST_SHORTCIRCUIT
+use constant U => undef;
+print "boo\n" if U; # test OPpCONST_SHORTCIRCUIT
no warnings 'void' ;
"abc"; # OP_CONST
7 ; # OP_CONST
BEGIN not safe after errors--compilation aborted at - line 18.
########
# op.c
-use warnings 'syntax' ;
+use warnings 'parenthesis' ;
my $a, $b = (1,2);
-no warnings 'syntax' ;
+my @foo,%bar, $quux; # there's a TAB here
+my $x, $y or print;
+no warnings 'parenthesis' ;
my $c, $d = (1,2);
EXPECT
Parentheses missing around "my" list at - line 3.
+Parentheses missing around "my" list at - line 4.
########
# op.c
-use warnings 'syntax' ;
+use warnings 'parenthesis' ;
+our $a, $b = (1,2);
+no warnings 'parenthesis' ;
+our $c, $d = (1,2);
+EXPECT
+Parentheses missing around "our" list at - line 3.
+########
+# op.c
+use warnings 'parenthesis' ;
local $a, $b = (1,2);
-no warnings 'syntax' ;
+local *f, *g;
+no warnings 'parenthesis' ;
local $c, $d = (1,2);
EXPECT
Parentheses missing around "local" list at - line 3.
+Parentheses missing around "local" list at - line 4.
########
# op.c
use warnings 'bareword' ;
Value of readdir() operator can be "0"; test with defined() at - line 4.
########
# op.c
+use warnings 'misc';
+open FH, "<abc";
+$_ = <FH> err $_ = 1;
+($_ = <FH>) // ($_ = 1);
+opendir DH, ".";
+$_ = readdir DH err $_ = 1;
+$_ = <*> err $_ = 1;
+%a = (1,2,3,4) ;
+$_ = each %a err $_ = 1;
+EXPECT
+########
+# op.c
use warnings 'redefine' ;
sub fred {}
sub fred {}
sub fred () { 1 }
*fred = sub () { 2 };
EXPECT
-Constant subroutine fred redefined at - line 4.
+Constant subroutine main::fred redefined at - line 4.
########
# op.c
use warnings 'redefine' ;
Hash %FRED missing the % in argument 1 of keys() at - line 3.
########
# op.c
+BEGIN {
+ if ($^O eq 'MacOS') {
+ print <<EOM;
+SKIPPED
+# no exec on Mac OS
+EOM
+ exit;
+ }
+}
use warnings 'syntax' ;
exec "$^X -e 1" ;
my $a
EXPECT
-Statement unlikely to be reached at - line 4.
+Statement unlikely to be reached at - line 13.
(Maybe you meant system() when you said exec()?)
########
# op.c
(Maybe you should just omit the defined()?)
########
# op.c
+BEGIN {
+ if ($^O eq 'MacOS') {
+ print <<EOM;
+SKIPPED
+# no exec on Mac OS
+EOM
+ exit;
+ }
+}
no warnings 'syntax' ;
exec "$^X -e 1" ;
my $a
Useless use of unshift with no values at - line 5.
########
# op.c
-use warnings 'deprecated' ;
-package;
-no warnings 'deprecated' ;
-package;
+# 20020401 mjd@plover.com at suggestion of jfriedl@yahoo.com
+use warnings 'regexp';
+split /blah/g, "blah";
+no warnings 'regexp';
+split /blah/g, "blah";
EXPECT
-Use of "package" with no arguments is deprecated at - line 3.
-Global symbol "BEGIN" requires explicit package name at - line 4.
-BEGIN not safe after errors--compilation aborted at - line 4.
+Use of /g modifier is meaningless in split at - line 4.
########
-# op.c [Perl_utilize]
-use warnings 'misc';
-push @INC, sub { $_[1] eq 'Joe.pm' ? *DATA : undef };
-eval "use Joe";
-__DATA__
-package joe; 1;
+# op.c
+use warnings 'precedence';
+$a = $b & $c == $d;
+$a = $b ^ $c != $d;
+$a = $b | $c > $d;
+$a = $b < $c & $d;
+$a = $b >= $c ^ $d;
+$a = $b <= $c | $d;
+$a = $b <=> $c & $d;
+$a &= $b == $c; $a |= $b == $c; $a ^= $b == $c; # shouldn't warn
+no warnings 'precedence';
+$a = $b & $c == $d;
+$a = $b ^ $c != $d;
+$a = $b | $c > $d;
+$a = $b < $c & $d;
+$a = $b >= $c ^ $d;
+$a = $b <= $c | $d;
+$a = $b <=> $c & $d;
+EXPECT
+Possible precedence problem on bitwise & operator at - line 3.
+Possible precedence problem on bitwise ^ operator at - line 4.
+Possible precedence problem on bitwise | operator at - line 5.
+Possible precedence problem on bitwise & operator at - line 6.
+Possible precedence problem on bitwise ^ operator at - line 7.
+Possible precedence problem on bitwise | operator at - line 8.
+Possible precedence problem on bitwise & operator at - line 9.
+########
+# op.c
+use integer;
+use warnings 'precedence';
+$a = $b & $c == $d;
+$a = $b ^ $c != $d;
+$a = $b | $c > $d;
+$a = $b < $c & $d;
+$a = $b >= $c ^ $d;
+$a = $b <= $c | $d;
+$a = $b <=> $c & $d;
+no warnings 'precedence';
+$a = $b & $c == $d;
+$a = $b ^ $c != $d;
+$a = $b | $c > $d;
+$a = $b < $c & $d;
+$a = $b >= $c ^ $d;
+$a = $b <= $c | $d;
+$a = $b <=> $c & $d;
+EXPECT
+Possible precedence problem on bitwise & operator at - line 4.
+Possible precedence problem on bitwise ^ operator at - line 5.
+Possible precedence problem on bitwise | operator at - line 6.
+Possible precedence problem on bitwise & operator at - line 7.
+Possible precedence problem on bitwise ^ operator at - line 8.
+Possible precedence problem on bitwise | operator at - line 9.
+Possible precedence problem on bitwise & operator at - line 10.
+########
+# op.c
+
+# ok => local() has desired effect;
+# ignore=> local() silently ignored
+
+use warnings 'syntax';
+
+local(undef); # OP_UNDEF ignore
+sub lval : lvalue {};
+local(lval()); # OP_ENTERSUB
+local($x **= 1); # OP_POW
+local($x *= 1); # OP_MULTIPLY
+local($x /= 1); # OP_DIVIDE
+local($x %= 1); # OP_MODULO
+local($x x= 1); # OP_REPEAT
+local($x += 1); # OP_ADD
+local($x -= 1); # OP_SUBTRACT
+local($x .= 1); # OP_CONCAT
+local($x <<= 1); # OP_LEFT_SHIFT
+local($x >>= 1); # OP_RIGHT_SHIFT
+local($x &= 1); # OP_BIT_AND
+local($x ^= 1); # OP_BIT_XOR
+local($x |= 1); # OP_BIT_OR
+{
+ use integer;
+ local($x *= 1); # OP_I_MULTIPLY
+ local($x /= 1); # OP_I_DIVIDE
+ local($x %= 1); # OP_I_MODULO
+ local($x += 1); # OP_I_ADD
+ local($x -= 1); # OP_I_SUBTRACT
+}
+local($x?$y:$z) = 1; # OP_COND_EXPR ok
+# these two are fatal run-time errors instead
+#local(@$a); # OP_RV2AV ok
+#local(%$a); # OP_RV2HV ok
+local(*a); # OP_RV2GV ok
+local(@a[1,2]); # OP_ASLICE ok
+local(@a{1,2}); # OP_HSLICE ok
+local(@a = (1,2)); # OP_AASSIGN
+local($$x); # OP_RV2SV ok
+local($#a); # OP_AV2ARYLEN
+local($x = 1); # OP_SASSIGN
+local($x &&= 1); # OP_ANDASSIGN
+local($x ||= 1); # OP_ORASSIGN
+local($x //= 1); # OP_DORASSIGN
+local($a[0]); # OP_AELEMFAST ok
+
+local(substr($x,0,1)); # OP_SUBSTR
+local(pos($x)); # OP_POS
+local(vec($x,0,1)); # OP_VEC
+local($a[$b]); # OP_AELEM ok
+local($a{$b}); # OP_HELEM ok
+
+no warnings 'syntax';
+EXPECT
+Useless localization of subroutine entry at - line 10.
+Useless localization of exponentiation (**) at - line 11.
+Useless localization of multiplication (*) at - line 12.
+Useless localization of division (/) at - line 13.
+Useless localization of modulus (%) at - line 14.
+Useless localization of repeat (x) at - line 15.
+Useless localization of addition (+) at - line 16.
+Useless localization of subtraction (-) at - line 17.
+Useless localization of concatenation (.) or string at - line 18.
+Useless localization of left bitshift (<<) at - line 19.
+Useless localization of right bitshift (>>) at - line 20.
+Useless localization of bitwise and (&) at - line 21.
+Useless localization of bitwise xor (^) at - line 22.
+Useless localization of bitwise or (|) at - line 23.
+Useless localization of integer multiplication (*) at - line 26.
+Useless localization of integer division (/) at - line 27.
+Useless localization of integer modulus (%) at - line 28.
+Useless localization of integer addition (+) at - line 29.
+Useless localization of integer subtraction (-) at - line 30.
+Useless localization of list assignment at - line 39.
+Useless localization of array length at - line 41.
+Useless localization of scalar assignment at - line 42.
+Useless localization of logical and assignment (&&=) at - line 43.
+Useless localization of logical or assignment (||=) at - line 44.
+Useless localization of defined or assignment (//=) at - line 45.
+Useless localization of substr at - line 48.
+Useless localization of match position at - line 49.
+Useless localization of vec at - line 50.
+########
+# op.c
+use warnings 'deprecated';
+my $x1 if 0;
+my @x2 if 0;
+my %x3 if 0;
+my ($x4) if 0;
+my ($x5,@x6, %x7) if 0;
+0 && my $z1;
+0 && my (%z2);
+# these shouldn't warn
+our $x if 0;
+our $x unless 0;
+if (0) { my $w1 }
+if (my $w2) { $a=1 }
+if ($a && (my $w3 = 1)) {$a = 2}
+
EXPECT
-Package `Joe' not found (did you use the incorrect case?) at (eval 1) line 2.
+Deprecated use of my() in false conditional at - line 3.
+Deprecated use of my() in false conditional at - line 4.
+Deprecated use of my() in false conditional at - line 5.
+Deprecated use of my() in false conditional at - line 6.
+Deprecated use of my() in false conditional at - line 7.
+Deprecated use of my() in false conditional at - line 8.
+Deprecated use of my() in false conditional at - line 9.