3 use Eval::WithLexicals;
9 local $ENV{PERL_STRICTURES_EXTRA} = 0;
13 # Find the hint value that 'use strictures 1' sets on this perl.
14 $strictures_hints = $^H;
15 $strictures_warn = ${^WARNING_BITS};
23 my $eval = Eval::WithLexicals->with_plugins("HintPersistence")->new(prelude => '');
26 [ $eval->eval('$x = 1') ],
28 'Basic non-strict eval ok'
36 $eval->eval('use strictures 1');
39 local $SIG{__WARN__} = sub { };
41 ok !eval { $eval->eval('$x') }, 'Unable to use undeclared variable';
42 like $@, qr/requires explicit package/, 'Correct message in $@';
46 ${$eval->hints->{q{$^H}}}, $strictures_hints,
47 'Hints are set per strictures'
51 (unpack "H*", ${$eval->hints->{q{${^WARNING_BITS}}}}),
52 (unpack "H*", $strictures_warn),
53 'Warning bits are set per strictures'
61 # Assumption about perl internals: sort pragma will set a key in %^H.
62 $eval->eval(q{ { use hint_hash_pragma 'param' } }),
63 ok !exists $eval->hints->{q{%^H}}->{hint_hash_pragma},
64 "Lexical pragma used below main scope not captured";
66 $eval->eval(q{ use hint_hash_pragma 'param' }),
67 is $eval->hints->{q{%^H}}->{hint_hash_pragma}, 'param',
68 "Lexical pragma captured";