X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit%2FDevel-REPL.git;a=blobdiff_plain;f=lib%2FDevel%2FREPL%2FPlugin%2FLexEnv.pm;fp=lib%2FDevel%2FREPL%2FPlugin%2FLexEnv.pm;h=f78fb018169f6650f4ae6c8514ee7acbe0a814f4;hp=0000000000000000000000000000000000000000;hb=85cd27808a3e9294c1b5345fb5bbca046821933d;hpb=9d03fe0437b57edb434fa6a6f8bfee8723f58379 diff --git a/lib/Devel/REPL/Plugin/LexEnv.pm b/lib/Devel/REPL/Plugin/LexEnv.pm new file mode 100644 index 0000000..f78fb01 --- /dev/null +++ b/lib/Devel/REPL/Plugin/LexEnv.pm @@ -0,0 +1,30 @@ +package Devel::REPL::Plugin::LexEnv; + +use Moose::Role; +use namespace::clean -except => [ 'meta' ]; +use Lexical::Persistence; + +has 'lexical_environment' => ( + isa => 'Lexical::Persistence', + is => 'rw', + required => 1, + lazy => 1, + default => sub { Lexical::Persistence->new } +); + +around 'mangle_line' => sub { + my $orig = shift; + my ($self, @rest) = @_; + my $line = $self->$orig(@rest); + my $lp = $self->lexical_environment; + return join('', map { "my $_;\n" } keys %{$lp->get_context('_')}).$line; +}; + +around 'execute' => sub { + my $orig = shift; + my ($self, $to_exec, @rest) = @_; + my $wrapped = $self->lexical_environment->wrap($to_exec); + return $self->$orig($wrapped, @rest); +}; + +1;