Check strict subs functionality __END__ # no strict, should build & run ok. Fred ; my $fred ; $b = "fred" ; $a = $$b ; EXPECT ######## use strict qw(refs vars); Fred ; EXPECT ######## use strict ; no strict 'subs' ; Fred ; EXPECT ######## # strict subs - error use strict 'subs' ; my @a = (1..2); my $b = xyz; EXPECT Bareword "xyz" not allowed while "strict subs" in use at - line 5. Execution of - aborted due to compilation errors. ######## # strict subs - error use strict 'subs' ; Fred ; EXPECT Bareword "Fred" not allowed while "strict subs" in use at - line 4. Execution of - aborted due to compilation errors. ######## # strict subs - error use strict 'subs' ; my @a = (A..Z); EXPECT Bareword "A" not allowed while "strict subs" in use at - line 4. Bareword "Z" not allowed while "strict subs" in use at - line 4. Execution of - aborted due to compilation errors. ######## # strict subs - error use strict 'subs' ; my $a = (B..Y); EXPECT Bareword "B" not allowed while "strict subs" in use at - line 4. Bareword "Y" not allowed while "strict subs" in use at - line 4. Execution of - aborted due to compilation errors. ######## # strict subs - error use strict ; Fred ; EXPECT Bareword "Fred" not allowed while "strict subs" in use at - line 4. Execution of - aborted due to compilation errors. ######## # strict subs - no error use strict 'subs' ; sub Fred {} Fred ; EXPECT ######## # Check compile time scope of strict subs pragma use strict 'subs' ; { no strict ; my $a = Fred ; } my $a = Fred ; EXPECT Bareword "Fred" not allowed while "strict subs" in use at - line 8. Execution of - aborted due to compilation errors. ######## # Check compile time scope of strict subs pragma no strict; { use strict 'subs' ; my $a = Fred ; } my $a = Fred ; EXPECT Bareword "Fred" not allowed while "strict subs" in use at - line 6. Execution of - aborted due to compilation errors. ######## # Check compile time scope of strict vars pragma use strict 'vars' ; { no strict ; $joe = 1 ; } $joe = 1 ; EXPECT Variable "$joe" is not imported at - line 8. Global symbol "$joe" requires explicit package name at - line 8. Execution of - aborted due to compilation errors. ######## # Check compile time scope of strict vars pragma no strict; { use strict 'vars' ; $joe = 1 ; } $joe = 1 ; EXPECT Global symbol "$joe" requires explicit package name at - line 6. Execution of - aborted due to compilation errors. ######## # Check runtime scope of strict refs pragma use strict 'refs'; my $fred ; my $b = "fred" ; { no strict ; my $a = $$b ; } my $a = $$b ; EXPECT Can't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 10. ######## # Check runtime scope of strict refs pragma no strict ; my $fred ; my $b = "fred" ; { use strict 'refs' ; my $a = $$b ; } my $a = $$b ; EXPECT Can't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 8. ######## # Check runtime scope of strict refs pragma no strict ; my $fred ; my $b = "fred" ; { use strict 'refs' ; $a = sub { my $c = $$b ; } } &$a ; EXPECT Can't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 8. ######## use strict 'subs' ; my $a = Fred ; EXPECT Bareword "Fred" not allowed while "strict subs" in use at - line 3. Execution of - aborted due to compilation errors. ######## --FILE-- abc my $a = Fred ; 1; --FILE-- use strict 'subs' ; require "./abc"; EXPECT ######## --FILE-- abc use strict 'subs' ; 1; --FILE-- require "./abc"; my $a = Fred ; EXPECT ######## --FILE-- abc use strict 'subs' ; my $a = Fred ; 1; --FILE-- Fred ; require "./abc"; EXPECT Bareword "Fred" not allowed while "strict subs" in use at ./abc line 2. Compilation failed in require at - line 2. ######## --FILE-- abc.pm use strict 'subs' ; my $a = Fred ; 1; --FILE-- Fred ; use abc; EXPECT Bareword "Fred" not allowed while "strict subs" in use at abc.pm line 2. Compilation failed in require at - line 2. BEGIN failed--compilation aborted at - line 2. ######## # Check scope of pragma with eval no strict ; eval { my $a = Fred ; }; print STDERR $@; my $a = Fred ; EXPECT ######## # Check scope of pragma with eval no strict ; eval { use strict 'subs' ; my $a = Fred ; }; print STDERR $@; my $a = Fred ; EXPECT Bareword "Fred" not allowed while "strict subs" in use at - line 6. Execution of - aborted due to compilation errors. ######## # Check scope of pragma with eval use strict 'subs' ; eval { my $a = Fred ; }; print STDERR $@; my $a = Fred ; EXPECT Bareword "Fred" not allowed while "strict subs" in use at - line 5. Bareword "Fred" not allowed while "strict subs" in use at - line 8. Execution of - aborted due to compilation errors. ######## # Check scope of pragma with eval use strict 'subs' ; eval { no strict ; my $a = Fred ; }; print STDERR $@; my $a = Fred ; EXPECT Bareword "Fred" not allowed while "strict subs" in use at - line 9. Execution of - aborted due to compilation errors. ######## # Check scope of pragma with eval no strict ; eval ' Fred ; '; print STDERR $@ ; Fred ; EXPECT ######## # Check scope of pragma with eval no strict ; eval q[ use strict 'subs' ; Fred ; ]; print STDERR $@; EXPECT Bareword "Fred" not allowed while "strict subs" in use at (eval 1) line 3. ######## # Check scope of pragma with eval use strict 'subs' ; eval ' Fred ; '; print STDERR $@ ; EXPECT Bareword "Fred" not allowed while "strict subs" in use at (eval 1) line 2. ######## # Check scope of pragma with eval use strict 'subs' ; eval ' no strict ; my $a = Fred ; '; print STDERR $@; my $a = Fred ; EXPECT Bareword "Fred" not allowed while "strict subs" in use at - line 8. Execution of - aborted due to compilation errors. ######## # see if Foo->Bar(...) etc work under strictures use strict; package Foo; sub Bar { print "@_\n" } Foo->Bar('a',1); Bar Foo ('b',2); Foo->Bar(qw/c 3/); Bar Foo (qw/d 4/); Foo::->Bar('A',1); Bar Foo:: ('B',2); Foo::->Bar(qw/C 3/); Bar Foo:: (qw/D 4/); EXPECT Foo a 1 Foo b 2 Foo c 3 Foo d 4 Foo A 1 Foo B 2 Foo C 3 Foo D 4 ######## # Check that barewords on the RHS of a regex match are caught use strict; "" =~ foo; EXPECT Bareword "foo" not allowed while "strict subs" in use at - line 4. Execution of - aborted due to compilation errors. ######## # ID 20020703.002 use strict; use warnings; my $abc = XYZ ? 1 : 0; print "$abc\n"; EXPECT Bareword "XYZ" not allowed while "strict subs" in use at - line 5. Execution of - aborted due to compilation errors. ######## # [perl #10021] use strict; use warnings; print "" if BAREWORD; EXPECT Bareword "BAREWORD" not allowed while "strict subs" in use at - line 5. Execution of - aborted due to compilation errors. ######## # Ticket: 18927 use strict 'subs'; print 1..1, bad; EXPECT Bareword "bad" not allowed while "strict subs" in use at - line 3. Execution of - aborted due to compilation errors. ######## eval q{ use strict; no strict refs; }; print $@; EXPECT Bareword "refs" not allowed while "strict subs" in use at (eval 1) line 1. ######## # [perl #25147] use strict; print "" if BAREWORD; EXPECT Bareword "BAREWORD" not allowed while "strict subs" in use at - line 3. Execution of - aborted due to compilation errors. ######## # [perl #26910] hints not propagated into (?{...}) use strict 'subs'; qr/(?{my $x=foo})/; EXPECT Bareword "foo" not allowed while "strict subs" in use at (re_eval 1) line 1. Compilation failed in regexp at - line 3. ######## # Regexp compilation errors weren't UTF-8 clean use strict 'subs'; use utf8; use open qw( :utf8 :std ); qr/(?{my $x=fòò})/; EXPECT Bareword "fòò" not allowed while "strict subs" in use at (re_eval 1) line 1. Compilation failed in regexp at - line 5. ######## # [perl #27628] strict 'subs' didn't warn on bareword array index use strict 'subs'; my $x=$a[FOO]; EXPECT Bareword "FOO" not allowed while "strict subs" in use at - line 3. Execution of - aborted due to compilation errors. ######## use strict 'subs'; my @a;my $x=$a[FOO]; EXPECT Bareword "FOO" not allowed while "strict subs" in use at - line 2. Execution of - aborted due to compilation errors. ######## # [perl #53806] No complain about bareword use strict 'subs'; print FOO . "\n"; EXPECT Bareword "FOO" not allowed while "strict subs" in use at - line 3. Execution of - aborted due to compilation errors. ######## # [perl #53806] No complain about bareword use strict 'subs'; $ENV{PATH} = ""; system(FOO . "\n"); EXPECT Bareword "FOO" not allowed while "strict subs" in use at - line 4. Execution of - aborted due to compilation errors. ######## use strict 'subs'; my @players; eval { @players = sort(_rankCompare @players) }; sub _rankCompare2 { } @players = sort(_rankCompare2 @players); EXPECT ######## use strict; readline(FOO); EXPECT ######## use strict 'subs'; sub sayfoo { print "foo:@_\n" ; "ret\n" } print sayfoo "bar"; print sayfoo . "bar\n"; EXPECT foo:bar ret foo: ret bar ######## # infinite loop breaks some strict checking use strict 'subs'; sub foo { 1 while 1; kill FOO, 1; } EXPECT Bareword "FOO" not allowed while "strict subs" in use at - line 5. Execution of - aborted due to compilation errors.