summaryrefslogtreecommitdiffstats
path: root/lib/Reply/Plugin/Defaults.pm
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-06-27 17:19:58 -0400
committerJesse Luehrs <doy@tozt.net>2013-06-27 17:19:58 -0400
commitc9f72cf51b809fe907db1faa4071f0baafeab20c (patch)
treeb2fb4cb637e034f0a8edc49672152a69ee8dfcbc /lib/Reply/Plugin/Defaults.pm
parent90ec7c86880fbd5ecc3ab09b111194a90c0ab06a (diff)
downloadreply-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.pm21
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) = @_;