my($self) = @_;
( q{ sub Eval::WithLexicals::Cage::capture_hints {
- no warnings 'closure';
- my($hints, %hints);
- BEGIN { $hints = $^H; %hints = %^H; }
- return q{$^H} => \$hints, q{%^H} => \%hints;
+ my ($hints, %hints, $warn_bits);
+ BEGIN {
+ no warnings 'closure';
+ $hints = $^H;
+ %hints = %^H;
+ $warn_bits = ${^WARNING_BITS};
+ }
+ return (
+ q{$^H} => \$hints,
+ q{%^H} => \%hints,
+ q{${^WARNING_BITS}} => \$warn_bits,
+ );
} },
$orig->(@_) )
};
use strictures ();
-my $strictures_hints;
-BEGIN {
- local $ENV{PERL_STRICTURES_EXTRA} = 0;
- strictures->VERSION(1); strictures->import();
- # Find the hint value that 'use strictures 1' sets on this perl.
- $strictures_hints = $^H;
-}
-use strictures 1;
-
use Test::More;
use Eval::WithLexicals;
use lib 't/lib';
+my $strictures_hints;
+my $strictures_warn;
+{
+ local $ENV{PERL_STRICTURES_EXTRA} = 0;
+ eval q{
+ use strictures 1;
+ BEGIN {
+ # Find the hint value that 'use strictures 1' sets on this perl.
+ $strictures_hints = $^H;
+ $strictures_warn = ${^WARNING_BITS};
+ };
+ 1;
+ } or die $@;
+};
+
+use strictures 1;
+
my $eval = Eval::WithLexicals->with_plugins("HintPersistence")->new(prelude => '');
is_deeply(
like $@, qr/requires explicit package/, 'Correct message in $@';
}
-is_deeply(
- $eval->hints->{q{$^H}}, \$strictures_hints,
+is(
+ ${$eval->hints->{q{$^H}}}, $strictures_hints,
'Hints are set per strictures'
);
+is(
+ (unpack "H*", ${$eval->hints->{q{${^WARNING_BITS}}}}),
+ (unpack "H*", $strictures_warn),
+ 'Warning bits are set per strictures'
+);
+
is_deeply(
$eval->lexicals, { },
'Lexical not stored'