Check strict refs functionality __END__ # no strict, should build & run ok. my $fred ; $b = "fred" ; $a = $$b ; $c = ${"def"} ; $c = @{"def"} ; $c = %{"def"} ; $c = *{"def"} ; $c = \&{"def"} ; $c = def->[0]; $c = def->{xyz}; EXPECT ######## # strict refs - error use strict ; my $fred ; my $a = ${"fred"} ; EXPECT Can't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 5. ######## # strict refs - error use strict 'refs' ; my $fred ; my $a = ${"fred"} ; EXPECT Can't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 5. ######## # strict refs - error use strict 'refs' ; my $fred ; my $b = "fred" ; my $a = $$b ; EXPECT Can't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 6. ######## # strict refs - error use strict 'refs' ; my $b ; my $a = $$b ; EXPECT Can't use an undefined value as a SCALAR reference at - line 5. ######## # strict refs - error use strict 'refs' ; my $b ; my $a = @$b ; EXPECT Can't use an undefined value as an ARRAY reference at - line 5. ######## # strict refs - error use strict 'refs' ; my $b ; my $a = %$b ; EXPECT Can't use an undefined value as a HASH reference at - line 5. ######## # strict refs - error use strict 'refs' ; my $b ; my $a = *$b ; EXPECT Can't use an undefined value as a symbol reference at - line 5. ######## # strict refs - error use strict 'refs' ; my $a = fred->[0] ; EXPECT Can't use bareword ("fred") as an ARRAY ref while "strict refs" in use at - line 4. ######## # strict refs - error use strict 'refs' ; my $a = fred->{barney} ; EXPECT Can't use bareword ("fred") as a HASH ref while "strict refs" in use at - line 4. ######## # strict refs - no error use strict ; no strict 'refs' ; my $fred ; my $b = "fred" ; my $a = $$b ; use strict 'refs' ; EXPECT ######## # strict refs - no error use strict qw(subs vars) ; my $fred ; my $b = "fred" ; my $a = $$b ; use strict 'refs' ; EXPECT ######## # strict refs - no error my $fred ; my $b = "fred" ; my $a = $$b ; use strict 'refs' ; EXPECT ######## # strict refs - no error use strict 'refs' ; my $fred ; my $b = \$fred ; my $a = $$b ; EXPECT ######## # 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. ######## --FILE-- abc my $a = ${"Fred"} ; 1; --FILE-- use strict 'refs' ; require "./abc"; EXPECT ######## --FILE-- abc use strict 'refs' ; 1; --FILE-- require "./abc"; my $a = ${"Fred"} ; EXPECT ######## --FILE-- abc use strict 'refs' ; my $a = ${"Fred"} ; 1; --FILE-- ${"Fred"} ; require "./abc"; EXPECT Can't use string ("Fred") as a SCALAR ref while "strict refs" in use at ./abc line 2. Compilation failed in require at - line 2. ######## --FILE-- abc.pm use strict 'refs' ; my $a = ${"Fred"} ; 1; --FILE-- my $a = ${"Fred"} ; use abc; EXPECT Can't use string ("Fred") as a SCALAR ref while "strict refs" 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 'refs' ; my $a = ${"Fred"} ; }; print STDERR $@ ; my $a = ${"Fred"} ; EXPECT Can't use string ("Fred") as a SCALAR ref while "strict refs" in use at - line 6. ######## # Check scope of pragma with eval use strict 'refs' ; eval { my $a = ${"Fred"} ; }; print STDERR $@ ; EXPECT Can't use string ("Fred") as a SCALAR ref while "strict refs" in use at - line 5. ######## # Check scope of pragma with eval use strict 'refs' ; eval { no strict ; my $a = ${"Fred"} ; }; print STDERR $@ ; my $a = ${"Fred"} ; EXPECT Can't use string ("Fred") as a SCALAR ref while "strict refs" in use at - line 9. ######## # 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 q[ use strict 'refs' ; my $a = ${"Fred"} ; ]; print STDERR $@; EXPECT Can't use string ("Fred") as a SCALAR ref while "strict refs" in use at (eval 1) line 3. ######## # Check scope of pragma with eval use strict 'refs' ; eval ' my $a = ${"Fred"} ; '; print STDERR $@ ; EXPECT Can't use string ("Fred") as a SCALAR ref while "strict refs" in use at (eval 1) line 2. ######## # Check scope of pragma with eval use strict 'refs' ; eval ' no strict ; my $a = ${"Fred"} ; '; print STDERR $@; my $a = ${"Fred"} ; EXPECT Can't use string ("Fred") as a SCALAR ref while "strict refs" in use at - line 8.