From: epitaph Date: Thu, 26 Apr 2007 01:30:12 +0000 (+0000) Subject: Added D:R:P:Packages,pm. For experimentation only! X-Git-Tag: v1.003015~168 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit%2FDevel-REPL.git;a=commitdiff_plain;h=80f0324ccb990cd887d8a740e20a0d250a70d379 Added D:R:P:Packages,pm. For experimentation only! git-svn-id: http://dev.catalyst.perl.org/repos/bast/trunk/Devel-REPL@3211 bd8105ee-0ff8-0310-8827-fb3f25b6796d --- diff --git a/lib/Devel/REPL/Plugin/Packages.pm b/lib/Devel/REPL/Plugin/Packages.pm new file mode 100644 index 0000000..5d8ff78 --- /dev/null +++ b/lib/Devel/REPL/Plugin/Packages.pm @@ -0,0 +1,48 @@ +# First cut at handling packages. +# +# doesn't work very well, and totally doesn't work with the wrap_as_sub +# stuff ;) For comments only really + +package Devel::REPL::Plugin::Packages; + +use Moose::Role; + +has 'current_package' => ( + isa => 'Str', + is => 'rw', + default => 'main', + lazy => 1 +); + +around 'eval' => sub { +# we don't call forward to $orig here, since the new sub-wrapped system +# doesn't work. We spot package declarations and retain the name so +# that we can reenter the package for each statement. Not sure the +# regex is bob on, but then it doesn't work anyway... + my $orig=shift; + my ($self, $line)=@_; + + my @ret=("OOPS: ".__PACKAGE__.'$ret unset!'); + +# $self->print("Line is: $line"); + if($line=~/\s*package\s([\w:]*)/) { +# $self->print("Recognised as a package switch"); +# $ret=$self->$orig($line); + @ret=eval $line; +# $self->print("ret: @ret"); + # should check for good return here + $self->current_package($1); +# $self->print('curr pkg: '.$self->current_package); + } else { +# $self->print("Not a package switch"); + my $packaged_line='package ' . $self->current_package . '; '.$line; +# $self->print("packaged line: $packaged_line"); +# @ret=$self->$orig($packaged_line); + @ret=eval $packaged_line; +# $self->print("ret: @ret"); + } + return @ret; +}; + +1; +