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.
########
# [perl #26910] hints not propagated into (?{...})
use strict 'refs';
/(?{${"foo"}++})/;
EXPECT
Can't use string ("foo") as a SCALAR ref while "strict refs" in use at (re_eval 1) line 1.