X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit%2FEval-WithLexicals.git;a=blobdiff_plain;f=lib%2FEval%2FWithLexicals%2FWithHintPersistence.pm;h=75e0433fd24f904891f1b349b7c1e70ef0905d06;hp=de3f76b0602c470575298d3061d03cdfac1910d6;hb=3fb66cc7c134ee8da56ac1378d87eb653c7b7619;hpb=235f639907b987b1071de49449145e6d312768ef diff --git a/lib/Eval/WithLexicals/WithHintPersistence.pm b/lib/Eval/WithLexicals/WithHintPersistence.pm index de3f76b..75e0433 100644 --- a/lib/Eval/WithLexicals/WithHintPersistence.pm +++ b/lib/Eval/WithLexicals/WithHintPersistence.pm @@ -1,16 +1,21 @@ package Eval::WithLexicals::WithHintPersistence; use Moo::Role; +use Sub::Quote; +our $VERSION = '1.001000'; # 1.1.0 +$VERSION = eval $VERSION; + +# Used localised our($hints, %hints); -has first_eval => ( +has hints => ( is => 'rw', - default => sub { 1 }, + default => quote_sub q{ {} }, ); -has hints => ( +has _first_eval => ( is => 'rw', - default => sub { {} }, + default => quote_sub q{ 1 }, ); around eval => sub { @@ -46,8 +51,8 @@ around setup_code => sub { my($self) = @_; # Only run the prelude on the first eval, hints will be set after # that. - if($self->first_eval) { - $self->first_eval(0); + if($self->_first_eval) { + $self->_first_eval(0); return $self->prelude; } else { # Seems we can't use the technique of passing via @_ for code in a BEGIN @@ -63,7 +68,7 @@ around capture_code => sub { my($self) = @_; ( q{ sub Eval::WithLexicals::Cage::capture_hints { - no warnings 'closure'; # XXX: can we limit the scope of this? + no warnings 'closure'; my($hints, %hints); BEGIN { $hints = $^H; %hints = %^H; } return q{$^H} => \$hints, q{%^H} => \%hints; @@ -71,4 +76,32 @@ around capture_code => sub { $orig->(@_) ) }; +=head1 NAME + +Eval::WithLexicals::WithHintPersistence - Persist compile hints between evals + +=head1 SYNOPSIS + + use Eval::WithLexicals; + + my $eval = Eval::WithLexicals->with_plugins("HintPersistence")->new; + +=head1 DESCRIPTION + +Persist pragams and other compile hints between evals (for example the +L and L flags in effect). + +Saves and restores the C<$^H> and C<%^H> variables. + +=head1 METHODS + +=head2 hints + + $eval->hints('$^H') + +Returns the internal hints hash, keys are C<$^H> and C<%^H> for the hint bits +and hint hash respectively. + +=cut + 1;