The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
toke.c	AOK

    we seem to have lost a few ambiguous warnings!!

 
 		$a = <<;
 		Use of comma-less variable list is deprecated 
		(called 3 times via depcom)

     \1 better written as $1 
 	use warnings 'syntax' ;
 	s/(abc)/\1/;
 
     warn(warn_nosemi) 
     Semicolon seems to be missing
	$a = 1
	&time ;


     Reversed %c= operator 
	my $a =+ 2 ;
	$a =- 2 ;
	$a =* 2 ;
	$a =% 2 ;
	$a =& 2 ;
	$a =. 2 ;
	$a =^ 2 ;
	$a =| 2 ;
	$a =< 2 ;
	$a =/ 2 ;

     Scalar value %.*s better written as $%.*s" 
	@a[3] = 2;
	@a{3} = 2;

     Can't use \\%c to mean $%c in expression 
	$_ = "ab" ; s/(ab)/\1/e;

     Unquoted string "abc" may clash with future reserved word at - line 3.
     warn(warn_reserved	
	$a = abc;

     Possible attempt to separate words with commas 
	@a = qw(a, b, c) ;

     Possible attempt to put comments in qw() list 
	@a = qw(a b # c) ;

     %s (...) interpreted as function 
	print ("")
	printf ("")
	sort ("")

     Misplaced _ in number 
	$a = 1_2;
	$a = 1_2345_6;

    Bareword \"%s\" refers to nonexistent package
	$a = FRED:: ;

    Ambiguous call resolved as CORE::%s(), qualify as such or use &
	sub time {} 
	my $a = time()

    Unrecognized escape \\%c passed through
        $a = "\m" ;

    %s number > %s non-portable
        my $a =  0b011111111111111111111111111111110 ;
        $a =  0b011111111111111111111111111111111 ;
        $a =  0b111111111111111111111111111111111 ;
        $a =  0x0fffffffe ;
        $a =  0x0ffffffff ;
        $a =  0x1ffffffff ;
        $a =  0037777777776 ;
        $a =  0037777777777 ;
        $a =  0047777777777 ;

    Integer overflow in binary number
        my $a =  0b011111111111111111111111111111110 ;
        $a =  0b011111111111111111111111111111111 ;
        $a =  0b111111111111111111111111111111111 ;
        $a =  0x0fffffffe ;
        $a =  0x0ffffffff ;
        $a =  0x1ffffffff ;
        $a =  0037777777776 ;
        $a =  0037777777777 ;
        $a =  0047777777777 ;

    Use of /c modifier is meaningless without /g     

    Use of /c modifier is meaningless in s///

    Mandatory Warnings
    ------------------
    Use of "%s" without parentheses is ambiguous	[check_uni]
        rand + 4 

    Ambiguous use of -%s resolved as -&%s() 		[yylex]
        sub fred {} ; - fred ;

    Precedence problem: open %.*s should be open(%.*s)	[yylex]
    	open FOO || die;

    Operator or semicolon missing before %c%s		[yylex]
    Ambiguous use of %c resolved as operator %c
        *foo *foo

__END__
# toke.c
use warnings 'deprecated' ;
$a = <<;

no warnings 'deprecated' ;
$a = <<;

EXPECT
Use of bare << to mean <<"" is deprecated at - line 3 character 6.
########
# toke.c
use warnings 'syntax' ;
s/(abc)/\1/;
no warnings 'syntax' ;
s/(abc)/\1/;
EXPECT
\1 better written as $1 at - line 3 character 3.
########
# toke.c
use warnings 'qw' ;
our @a = qw(a, b, c);
no warnings 'qw' ;
@a = qw(a, b, c);
EXPECT
Possible attempt to separate words with commas at - line 3 character 10.
########
# toke.c
use warnings 'qw' ;
our @a = qw(a b #);
no warnings 'qw' ;
@a = qw(a b #);
EXPECT
Possible attempt to put comments in qw() list at - line 3 character 10.
########
# toke.c
use warnings 'syntax' ; our $x;
print ($^STDOUT, "");
print ($^STDOUT, "") and $x = 1;
print ($^STDOUT, "") or die;
print ($^STDOUT, "") // die;
print ($^STDOUT, 1+2) * 3 if 0; # only this one should warn
print ($^STDOUT, 1+2) if 0;
EXPECT
print (...) interpreted as function at - line 7 character 1.
########
# toke.c
no warnings 'syntax' ;
print ($^STDOUT, "")
EXPECT

########
# toke.c
use warnings 'syntax' ;
printf ($^STDOUT, "");
printf ($^STDOUT, "") . '';
EXPECT
printf (...) interpreted as function at - line 4 character 1.
########
# toke.c
no warnings 'syntax' ;
printf ($^STDOUT, "")
EXPECT

########
# toke.c
use warnings 'syntax' ;
$a = eval "_123"; print $^STDOUT, "$a\n";		#( 3	string)
$a = 1_23; print $^STDOUT, "$a\n";
$a = 12_3; print $^STDOUT, "$a\n";
$a = 123_; print $^STDOUT, "$a\n";		#  6
$a = eval "_+123"; print $^STDOUT, "$a\n";		#  7	string)
$a = eval "+_123"; print $^STDOUT, "$a\n";		#( 8	string)
$a = 1_23; print $^STDOUT, "$a\n";
$a = 12_3; print $^STDOUT, "$a\n";
$a = 123_; print $^STDOUT, "$a\n";		# 11
$a = eval "_-123"; print $^STDOUT, "$a\n";		#(12	string)

$a = -1_23; print $^STDOUT, "$a\n";
$a = -12_3; print $^STDOUT, "$a\n";
$a = -123_; print $^STDOUT, "$a\n";		# 16
$a = 123._456; print $^STDOUT, "$a\n";		# 17
$a = 123.4_56; print $^STDOUT, "$a\n";
$a = 123.45_6; print $^STDOUT, "$a\n";
$a = 123.456_; print $^STDOUT, "$a\n";		# 20
$a = 123._456; print $^STDOUT, "$a\n";		# 21
$a = 123.4_56; print $^STDOUT, "$a\n";	
$a = 123.45_6; print $^STDOUT, "$a\n";	
$a = 123.456_; print $^STDOUT, "$a\n";		# 24
$a = -123._456; print $^STDOUT, "$a\n";		# 25
$a = -123.4_56; print $^STDOUT, "$a\n";	
$a = -123.45_6; print $^STDOUT, "$a\n";
$a = -123.456_; print $^STDOUT, "$a\n";		# 28
$a = 123.456E_12; printf($^STDOUT, "%.0f\n", $a);	# 29
$a = 123.456E1_2; printf($^STDOUT, "%.0f\n", $a);
$a = 123.456E12_; printf($^STDOUT, "%.0f\n", $a);	# 31
$a = 123.456E_+12; printf($^STDOUT, "%.0f\n", $a);	# 32
$a = 123.456E+_12; printf($^STDOUT, "%.0f\n", $a);	# 33
$a = 123.456E+1_2; printf($^STDOUT, "%.0f\n", $a);
$a = 123.456E+12_; printf($^STDOUT, "%.0f\n", $a);	# 35
$a = 123.456E_-12; print $^STDOUT, "$a\n";	# 36
$a = 123.456E-_12; print $^STDOUT, "$a\n";	# 37
$a = 123.456E-1_2; print $^STDOUT, "$a\n";
$a = 123.456E-12_; print $^STDOUT, "$a\n";	# 39
$a = 1__23; print $^STDOUT, "$a\n";		# 40
$a = 12.3__4; print $^STDOUT, "$a\n";		# 41
$a = 12.34e1__2; printf($^STDOUT, "%.0f\n", $a);	# 42
no warnings 'syntax' ;
$a = eval "_123"; print $^STDOUT, "$a\n";
$a = 1_23; print $^STDOUT, "$a\n";
$a = 12_3; print $^STDOUT, "$a\n";
$a = 123_; print $^STDOUT, "$a\n";
$a = eval "_+123"; print $^STDOUT, "$a\n";
$a = eval "+_123"; print $^STDOUT, "$a\n";
$a = 1_23; print $^STDOUT, "$a\n";
$a = 12_3; print $^STDOUT, "$a\n";
$a = 123_; print $^STDOUT, "$a\n";
$a = eval "_-123"; print $^STDOUT, "$a\n";

$a = -1_23; print $^STDOUT, "$a\n";
$a = -12_3; print $^STDOUT, "$a\n";
$a = -123_; print $^STDOUT, "$a\n";
$a = 123._456; print $^STDOUT, "$a\n";
$a = 123.4_56; print $^STDOUT, "$a\n";
$a = 123.45_6; print $^STDOUT, "$a\n";
$a = 123.456_; print $^STDOUT, "$a\n";
$a = 123._456; print $^STDOUT, "$a\n";
$a = 123.4_56; print $^STDOUT, "$a\n";
$a = 123.45_6; print $^STDOUT, "$a\n";
$a = 123.456_; print $^STDOUT, "$a\n";
$a = -123._456; print $^STDOUT, "$a\n";
$a = -123.4_56; print $^STDOUT, "$a\n";
$a = -123.45_6; print $^STDOUT, "$a\n";
$a = -123.456_; print $^STDOUT, "$a\n";
$a = 123.456E_12; printf($^STDOUT, "%.0f\n", $a);
$a = 123.456E1_2; printf($^STDOUT, "%.0f\n", $a);
$a = 123.456E12_; printf($^STDOUT, "%.0f\n", $a);
$a = 123.456E_+12; printf($^STDOUT, "%.0f\n", $a);
$a = 123.456E+_12; printf($^STDOUT, "%.0f\n", $a);
$a = 123.456E+1_2; printf($^STDOUT, "%.0f\n", $a);
$a = 123.456E+12_; printf($^STDOUT, "%.0f\n", $a);
$a = 123.456E_-12; print $^STDOUT, "$a\n";
$a = 123.456E-_12; print $^STDOUT, "$a\n";
$a = 123.456E-1_2; print $^STDOUT, "$a\n";
$a = 123.456E-12_; print $^STDOUT, "$a\n";
$a = 1__23; print $^STDOUT, "$a\n";
$a = 12.3__4; print $^STDOUT, "$a\n";
$a = 12.34e1__2; printf($^STDOUT, "%.0f\n", $a);
EXPECT
Misplaced _ in number at - line 6 character 6.
Misplaced _ in number at - line 11 character 6.
Misplaced _ in number at - line 16 character 7.
Misplaced _ in number at - line 17 character 6.
Misplaced _ in number at - line 20 character 6.
Misplaced _ in number at - line 21 character 6.
Misplaced _ in number at - line 24 character 6.
Misplaced _ in number at - line 25 character 7.
Misplaced _ in number at - line 28 character 7.
Misplaced _ in number at - line 29 character 6.
Misplaced _ in number at - line 31 character 6.
Misplaced _ in number at - line 32 character 6.
Misplaced _ in number at - line 33 character 6.
Misplaced _ in number at - line 35 character 6.
Misplaced _ in number at - line 36 character 6.
Misplaced _ in number at - line 37 character 6.
Misplaced _ in number at - line 39 character 6.
Misplaced _ in number at - line 40 character 6.
Misplaced _ in number at - line 41 character 6.
Misplaced _ in number at - line 42 character 6.

123
123
123


123
123
123

-123
-123
-123
123.456
123.456
123.456
123.456
123.456
123.456
123.456
123.456
-123.456
-123.456
-123.456
-123.456
123456000000000
123456000000000
123456000000000
123456000000000
123456000000000
123456000000000
123456000000000
1.23456e-10
1.23456e-10
1.23456e-10
1.23456e-10
123
12.34
12340000000000

123
123
123


123
123
123

-123
-123
-123
123.456
123.456
123.456
123.456
123.456
123.456
123.456
123.456
-123.456
-123.456
-123.456
-123.456
123456000000000
123456000000000
123456000000000
123456000000000
123456000000000
123456000000000
123456000000000
1.23456e-10
1.23456e-10
1.23456e-10
1.23456e-10
123
12.34
12340000000000
########
# TODO toke.c
use warnings 'ambiguous' ;
sub time {}
my $a = time() ;
no warnings 'ambiguous' ;
my $b = time() ;
EXPECT
Ambiguous call resolved as CORE::time(), qualify as such or use & at - line 4 character 9.
########
# toke.c
use warnings ;
eval <<'EOE';
#  line 30 "foo"
warn "yelp";
do {
  use utf8;
  $_ = " \x{123} " ;
};
EOE
EXPECT
yelp at foo line 30 character 18.
    (eval) called at - line 3 character 1.
########
# toke.c
my $a = rand - 4 ;
EXPECT
Warning: Use of "rand" without parentheses is ambiguous at - line 2 character 14.
########
# toke.c
$^WARNING = 0 ;
my $a = rand - 4 ;
do {
    no warnings 'ambiguous' ;
    $a = rand - 4 ;
    use warnings 'ambiguous' ;
    $a = rand - 4 ;
};
$a = rand - 4 ;
EXPECT
Warning: Use of "rand" without parentheses is ambiguous at - line 3 character 14.
Warning: Use of "rand" without parentheses is ambiguous at - line 8 character 15.
Warning: Use of "rand" without parentheses is ambiguous at - line 10 character 11.
########
# toke.c
sub fred {};
-fred ;
EXPECT
Ambiguous use of -fred resolved as -&fred() at - line 3 character 2.
########
# toke.c
$^WARNING = 0 ;
sub fred {} ;
-fred ;
do {
    no warnings 'ambiguous' ;
    -fred ;
    use warnings 'ambiguous' ;
    -fred ;
};
-fred ;
EXPECT
Ambiguous use of -fred resolved as -&fred() at - line 4 character 2.
Ambiguous use of -fred resolved as -&fred() at - line 9 character 6.
Ambiguous use of -fred resolved as -&fred() at - line 11 character 2.
########
# toke.c (and [perl #16184])
open \*FOO => "<&", "0"; close \*FOO;
EXPECT

########
# toke.c
use warnings 'misc' ;
my $a = "\m" ;
no warnings 'misc' ;
$a = "\m" ;
EXPECT
Unrecognized escape \m passed through at - line 3 character 10.
########
use warnings 'misc' ;
my $a =~ m/[a\mb]/ ;
no warnings 'misc' ;
$a =~ m/[a\mb]/ ;
EXPECT
Unrecognized escape \m passed through at - line 2 character 19.
Unrecognized escape \m passed through at - line 2 character 19.
########
# toke.c
use warnings 'portable' ;
my $a =  0b011111111111111111111111111111110 ;
   $a =  0b011111111111111111111111111111111 ;
   $a =  0b111111111111111111111111111111111 ;
   $a =  0x0fffffffe ;
   $a =  0x0ffffffff ;
   $a =  0x1ffffffff ;
   $a =  0037777777776 ;
   $a =  0037777777777 ;
   $a =  0047777777777 ;
no warnings 'portable' ;
   $a =  0b011111111111111111111111111111110 ;
   $a =  0b011111111111111111111111111111111 ;
   $a =  0b111111111111111111111111111111111 ;
   $a =  0x0fffffffe ;
   $a =  0x0ffffffff ;
   $a =  0x1ffffffff ;
   $a =  0037777777776 ;
   $a =  0037777777777 ;
   $a =  0047777777777 ;
EXPECT
Binary number > 0b11111111111111111111111111111111 non-portable at - line 5 character 10.
Hexadecimal number > 0xffffffff non-portable at - line 8 character 10.
Octal number > 037777777777 non-portable at - line 11 character 10.
########
# toke.c
use warnings 'overflow' ;
my $a =  0b011111111111111111111111111111110 ;
   $a =  0b011111111111111111111111111111111 ;
   $a =  0b10000000000000000000000000000000000000000000000000000000000000000 ;
   $a =  0x0fffffffe ;
   $a =  0x0ffffffff ;
   $a =  0x10000000000000000 ;
   $a =  0037777777776 ;
   $a =  0037777777777 ;
   $a =  002000000000000000000000;
no warnings 'overflow' ;
   $a =  0b011111111111111111111111111111110 ;
   $a =  0b011111111111111111111111111111111 ;
   $a =  0b10000000000000000000000000000000000000000000000000000000000000000 ;
   $a =  0x0fffffffe ;
   $a =  0x0ffffffff ;
   $a =  0x10000000000000000 ;
   $a =  0037777777776 ;
   $a =  0037777777777 ;
   $a =  002000000000000000000000;
EXPECT
Integer overflow in binary number at - line 5 character 10.
Integer overflow in hexadecimal number at - line 8 character 10.
Integer overflow in octal number at - line 11 character 10.
########
# toke.c
# 20020328 mjd-perl-patch+@plover.com at behest of jfriedl@yahoo.com
use warnings 'regexp';
"foo" =~ m/foo/c;
"foo" =~ m/foo/cg;
no warnings 'regexp';
"foo" =~ m/foo/c;
"foo" =~ m/foo/cg;
EXPECT
Use of /c modifier is meaningless without /g at - line 4 character 10.
########
# toke.c
# 20020328 mjd-perl-patch+@plover.com at behest of jfriedl@yahoo.com
use warnings 'regexp';
$_ = "ab" ; 
s/ab/ab/c;
s/ab/ab/cg;
no warnings 'regexp';
s/ab/ab/c;
s/ab/ab/cg;
EXPECT
Use of /c modifier is meaningless in s/// at - line 5 character 1.
Use of /c modifier is meaningless in s/// at - line 6 character 1.
########
# toke.c
# mandatory warning
eval q/if ($a) { } elseif ($b) { }/;
no warnings "syntax";
eval q/if ($a) { } elseif ($b) { }/;
EXPECT
elseif should be elsif at (eval 1) line 1 character 13.
    (eval) called at - line 3 character 1.
########
# toke.c
# mandatory warning
eval q/5 6/;
no warnings "syntax";
eval q/5 6/;
EXPECT
Number found where operator expected at (eval 1) line 1, near "5 6"
 at (eval 1) line 1 character 4.
    (eval) called at - line 3 character 1.
	(Missing operator before 6?)
 at (eval 1) line 1 character 4.
    (eval) called at - line 3 character 1.
########