diff options
author | Jesse Luehrs <doy@tozt.net> | 2013-06-27 17:19:58 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-06-27 17:19:58 -0400 |
commit | c9f72cf51b809fe907db1faa4071f0baafeab20c (patch) | |
tree | b2fb4cb637e034f0a8edc49672152a69ee8dfcbc /lib/Reply/Plugin/Defaults.pm | |
parent | 90ec7c86880fbd5ecc3ab09b111194a90c0ab06a (diff) | |
download | reply-c9f72cf51b809fe907db1faa4071f0baafeab20c.tar.gz reply-c9f72cf51b809fe907db1faa4071f0baafeab20c.zip |
use the publisher for communicating the lexical environment
Diffstat (limited to 'lib/Reply/Plugin/Defaults.pm')
-rw-r--r-- | lib/Reply/Plugin/Defaults.pm | 21 |
1 files changed, 13 insertions, 8 deletions
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) = @_; |