1N/ACheck strict refs functionality
1N/A
1N/A__END__
1N/A
1N/A# no strict, should build & run ok.
1N/Amy $fred ;
1N/A$b = "fred" ;
1N/A$a = $$b ;
1N/A$c = ${"def"} ;
1N/A$c = @{"def"} ;
1N/A$c = %{"def"} ;
1N/A$c = *{"def"} ;
1N/A$c = \&{"def"} ;
1N/A$c = def->[0];
1N/A$c = def->{xyz};
1N/AEXPECT
1N/A
1N/A########
1N/A
1N/A# strict refs - error
1N/Ause strict ;
1N/Amy $fred ;
1N/Amy $a = ${"fred"} ;
1N/AEXPECT
1N/ACan't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 5.
1N/A########
1N/A
1N/A# strict refs - error
1N/Ause strict 'refs' ;
1N/Amy $fred ;
1N/Amy $a = ${"fred"} ;
1N/AEXPECT
1N/ACan't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 5.
1N/A########
1N/A
1N/A# strict refs - error
1N/Ause strict 'refs' ;
1N/Amy $fred ;
1N/Amy $b = "fred" ;
1N/Amy $a = $$b ;
1N/AEXPECT
1N/ACan't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 6.
1N/A########
1N/A
1N/A# strict refs - error
1N/Ause strict 'refs' ;
1N/Amy $b ;
1N/Amy $a = $$b ;
1N/AEXPECT
1N/ACan't use an undefined value as a SCALAR reference at - line 5.
1N/A########
1N/A
1N/A# strict refs - error
1N/Ause strict 'refs' ;
1N/Amy $b ;
1N/Amy $a = @$b ;
1N/AEXPECT
1N/ACan't use an undefined value as an ARRAY reference at - line 5.
1N/A########
1N/A
1N/A# strict refs - error
1N/Ause strict 'refs' ;
1N/Amy $b ;
1N/Amy $a = %$b ;
1N/AEXPECT
1N/ACan't use an undefined value as a HASH reference at - line 5.
1N/A########
1N/A
1N/A# strict refs - error
1N/Ause strict 'refs' ;
1N/Amy $b ;
1N/Amy $a = *$b ;
1N/AEXPECT
1N/ACan't use an undefined value as a symbol reference at - line 5.
1N/A########
1N/A
1N/A# strict refs - error
1N/Ause strict 'refs' ;
1N/Amy $a = fred->[0] ;
1N/AEXPECT
1N/ACan't use bareword ("fred") as an ARRAY ref while "strict refs" in use at - line 4.
1N/A########
1N/A
1N/A# strict refs - error
1N/Ause strict 'refs' ;
1N/Amy $a = fred->{barney} ;
1N/AEXPECT
1N/ACan't use bareword ("fred") as a HASH ref while "strict refs" in use at - line 4.
1N/A########
1N/A
1N/A# strict refs - no error
1N/Ause strict ;
1N/Ano strict 'refs' ;
1N/Amy $fred ;
1N/Amy $b = "fred" ;
1N/Amy $a = $$b ;
1N/Ause strict 'refs' ;
1N/AEXPECT
1N/A
1N/A########
1N/A
1N/A# strict refs - no error
1N/Ause strict qw(subs vars) ;
1N/Amy $fred ;
1N/Amy $b = "fred" ;
1N/Amy $a = $$b ;
1N/Ause strict 'refs' ;
1N/AEXPECT
1N/A
1N/A########
1N/A
1N/A# strict refs - no error
1N/Amy $fred ;
1N/Amy $b = "fred" ;
1N/Amy $a = $$b ;
1N/Ause strict 'refs' ;
1N/AEXPECT
1N/A
1N/A########
1N/A
1N/A# strict refs - no error
1N/Ause strict 'refs' ;
1N/Amy $fred ;
1N/Amy $b = \$fred ;
1N/Amy $a = $$b ;
1N/AEXPECT
1N/A
1N/A########
1N/A
1N/A# Check runtime scope of strict refs pragma
1N/Ause strict 'refs';
1N/Amy $fred ;
1N/Amy $b = "fred" ;
1N/A{
1N/A no strict ;
1N/A my $a = $$b ;
1N/A}
1N/Amy $a = $$b ;
1N/AEXPECT
1N/ACan't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 10.
1N/A########
1N/A
1N/A# Check runtime scope of strict refs pragma
1N/Ano strict ;
1N/Amy $fred ;
1N/Amy $b = "fred" ;
1N/A{
1N/A use strict 'refs' ;
1N/A my $a = $$b ;
1N/A}
1N/Amy $a = $$b ;
1N/AEXPECT
1N/ACan't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 8.
1N/A########
1N/A
1N/A# Check runtime scope of strict refs pragma
1N/Ano strict ;
1N/Amy $fred ;
1N/Amy $b = "fred" ;
1N/A{
1N/A use strict 'refs' ;
1N/A $a = sub { my $c = $$b ; }
1N/A}
1N/A&$a ;
1N/AEXPECT
1N/ACan't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 8.
1N/A########
1N/A
1N/A
1N/A--FILE-- abc
1N/Amy $a = ${"Fred"} ;
1N/A1;
1N/A--FILE--
1N/Ause strict 'refs' ;
1N/Arequire "./abc";
1N/AEXPECT
1N/A
1N/A########
1N/A
1N/A--FILE-- abc
1N/Ause strict 'refs' ;
1N/A1;
1N/A--FILE--
1N/Arequire "./abc";
1N/Amy $a = ${"Fred"} ;
1N/AEXPECT
1N/A
1N/A########
1N/A
1N/A--FILE-- abc
1N/Ause strict 'refs' ;
1N/Amy $a = ${"Fred"} ;
1N/A1;
1N/A--FILE--
1N/A${"Fred"} ;
1N/Arequire "./abc";
1N/AEXPECT
1N/ACan't use string ("Fred") as a SCALAR ref while "strict refs" in use at ./abc line 2.
1N/ACompilation failed in require at - line 2.
1N/A########
1N/A
1N/A--FILE-- abc.pm
1N/Ause strict 'refs' ;
1N/Amy $a = ${"Fred"} ;
1N/A1;
1N/A--FILE--
1N/Amy $a = ${"Fred"} ;
1N/Ause abc;
1N/AEXPECT
1N/ACan't use string ("Fred") as a SCALAR ref while "strict refs" in use at abc.pm line 2.
1N/ACompilation failed in require at - line 2.
1N/ABEGIN failed--compilation aborted at - line 2.
1N/A########
1N/A
1N/A# Check scope of pragma with eval
1N/Ano strict ;
1N/Aeval {
1N/A my $a = ${"Fred"} ;
1N/A};
1N/Aprint STDERR $@ ;
1N/Amy $a = ${"Fred"} ;
1N/AEXPECT
1N/A
1N/A########
1N/A
1N/A# Check scope of pragma with eval
1N/Ano strict ;
1N/Aeval {
1N/A use strict 'refs' ;
1N/A my $a = ${"Fred"} ;
1N/A};
1N/Aprint STDERR $@ ;
1N/Amy $a = ${"Fred"} ;
1N/AEXPECT
1N/ACan't use string ("Fred") as a SCALAR ref while "strict refs" in use at - line 6.
1N/A########
1N/A
1N/A# Check scope of pragma with eval
1N/Ause strict 'refs' ;
1N/Aeval {
1N/A my $a = ${"Fred"} ;
1N/A};
1N/Aprint STDERR $@ ;
1N/AEXPECT
1N/ACan't use string ("Fred") as a SCALAR ref while "strict refs" in use at - line 5.
1N/A########
1N/A
1N/A# Check scope of pragma with eval
1N/Ause strict 'refs' ;
1N/Aeval {
1N/A no strict ;
1N/A my $a = ${"Fred"} ;
1N/A};
1N/Aprint STDERR $@ ;
1N/Amy $a = ${"Fred"} ;
1N/AEXPECT
1N/ACan't use string ("Fred") as a SCALAR ref while "strict refs" in use at - line 9.
1N/A########
1N/A
1N/A# Check scope of pragma with eval
1N/Ano strict ;
1N/Aeval '
1N/A my $a = ${"Fred"} ;
1N/A'; print STDERR $@ ;
1N/Amy $a = ${"Fred"} ;
1N/AEXPECT
1N/A
1N/A########
1N/A
1N/A# Check scope of pragma with eval
1N/Ano strict ;
1N/Aeval q[
1N/A use strict 'refs' ;
1N/A my $a = ${"Fred"} ;
1N/A]; print STDERR $@;
1N/AEXPECT
1N/ACan't use string ("Fred") as a SCALAR ref while "strict refs" in use at (eval 1) line 3.
1N/A########
1N/A
1N/A# Check scope of pragma with eval
1N/Ause strict 'refs' ;
1N/Aeval '
1N/A my $a = ${"Fred"} ;
1N/A'; print STDERR $@ ;
1N/AEXPECT
1N/ACan't use string ("Fred") as a SCALAR ref while "strict refs" in use at (eval 1) line 2.
1N/A########
1N/A
1N/A# Check scope of pragma with eval
1N/Ause strict 'refs' ;
1N/Aeval '
1N/A no strict ;
1N/A my $a = ${"Fred"} ;
1N/A'; print STDERR $@;
1N/Amy $a = ${"Fred"} ;
1N/AEXPECT
1N/ACan't use string ("Fred") as a SCALAR ref while "strict refs" in use at - line 8.
1N/A########
1N/A# [perl #26910] hints not propagated into (?{...})
1N/Ause strict 'refs';
1N/A/(?{${"foo"}++})/;
1N/AEXPECT
1N/ACan't use string ("foo") as a SCALAR ref while "strict refs" in use at (re_eval 1) line 1.