From c9f72cf51b809fe907db1faa4071f0baafeab20c Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Thu, 27 Jun 2013 17:19:58 -0400 Subject: use the publisher for communicating the lexical environment --- lib/Reply/Plugin/Defaults.pm | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'lib/Reply/Plugin/Defaults.pm') diff --git a/lib/Reply/Plugin/Defaults.pm b/lib/Reply/Plugin/Defaults.pm index eb43ecd..40dee9b 100644 --- a/lib/Reply/Plugin/Defaults.pm +++ b/lib/Reply/Plugin/Defaults.pm @@ -20,6 +20,7 @@ sub new { my $self = $class->SUPER::new(@_); $self->{quit} = 0; + $self->{env} = {}; return $self; } @@ -46,14 +47,11 @@ sub compile { my $self = shift; my ($next, $line, %args) = @_; - my @envs = ( - ($args{environment} ? ($args{environment}) : ()), - values %{ delete $args{environments} }, - ); - - if (@envs) { - $args{environment} = { map { %$_ } @envs } - } + my $default_env = delete $self->{env}{default} || {}; + my $env = { + (map { %$_ } values %{ $self->{env} }), + %$default_env, + }; my $package = delete $args{package} || 'main'; my $prefix = "package $package;\n$PREFIX"; @@ -61,10 +59,17 @@ sub compile { return eval_closure( source => "sub {\n$prefix;\n$line\n}", terse_error => 1, + environment => $env, %args, ); } +sub lexical_environment { + my $self = shift; + my ($name, $env) = @_; + $self->{env}{$name} = $env; +} + sub execute { my $self = shift; my ($next, $code, @args) = @_; -- cgit v1.2.3-54-g00ecf