From 436bede5fac60885a053baadf5dd659b258997b0 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Thu, 27 Jun 2013 17:41:33 -0400 Subject: make the current package go through the publisher too --- lib/Reply/Plugin/Defaults.pm | 10 ++++++++-- lib/Reply/Plugin/Packages.pm | 6 ++++-- 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; } -- cgit v1.2.3-54-g00ecf