summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-06-27 17:41:33 -0400
committerJesse Luehrs <doy@tozt.net>2013-06-27 17:41:33 -0400
commit436bede5fac60885a053baadf5dd659b258997b0 (patch)
treea6c77589f2be1ffb2dc5e50adb570d6ffd763fe3
parentfc6ae897dfa5861b9b2eaf069ab38389630adf90 (diff)
downloadreply-436bede5fac60885a053baadf5dd659b258997b0.tar.gz
reply-436bede5fac60885a053baadf5dd659b258997b0.zip
make the current package go through the publisher too
-rw-r--r--lib/Reply/Plugin/Defaults.pm10
-rw-r--r--lib/Reply/Plugin/Packages.pm6
2 files changed, 12 insertions, 4 deletions
diff --git a/lib/Reply/Plugin/Defaults.pm b/lib/Reply/Plugin/Defaults.pm
index 40dee9b..ca3c047 100644
--- a/lib/Reply/Plugin/Defaults.pm
+++ b/lib/Reply/Plugin/Defaults.pm
@@ -21,6 +21,7 @@ sub new {
my $self = $class->SUPER::new(@_);
$self->{quit} = 0;
$self->{env} = {};
+ $self->{package} = 'main';
return $self;
}
@@ -53,8 +54,7 @@ sub compile {
%$default_env,
};
- my $package = delete $args{package} || 'main';
- my $prefix = "package $package;\n$PREFIX";
+ my $prefix = "package $self->{package};\n$PREFIX";
return eval_closure(
source => "sub {\n$prefix;\n$line\n}",
@@ -70,6 +70,12 @@ sub lexical_environment {
$self->{env}{$name} = $env;
}
+sub package {
+ my $self = shift;
+ my ($package) = @_;
+ $self->{package} = $package;
+}
+
sub execute {
my $self = shift;
my ($next, $code, @args) = @_;
diff --git a/lib/Reply/Plugin/Packages.pm b/lib/Reply/Plugin/Packages.pm
index d6fad68..054467a 100644
--- a/lib/Reply/Plugin/Packages.pm
+++ b/lib/Reply/Plugin/Packages.pm
@@ -26,6 +26,9 @@ sub new {
my $self = $class->SUPER::new(@_);
$self->{package} = $opts{default_package} || 'main';
+ $self->{publisher} = $opts{publisher};
+
+ $self->{publisher}->(package => $self->{package});
return $self;
}
@@ -48,14 +51,13 @@ sub compile {
my $self = shift;
my ($next, $line, %args) = @_;
- $args{package} = $self->{package};
-
my @result = $next->($line, %args);
# XXX it'd be nice to avoid using globals here, but we can't use
# eval_closure's environment parameter since we need to access the
# information in a BEGIN block
$self->{package} = our $package;
+ $self->{publisher}->(package => $self->{package});
return @result;
}