X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDevel%2FREPL.pm;h=a46fbbe04c4540d674cecd3fbedec5756f1de90c;hb=9cfc1536ce713631d93a1d4d11259d1103fb9cae;hp=ff461f551ee0b437c47ec3894c79d1e7cee0f874;hpb=ac5ce6317473fc5d2f0823d812465504b009298f;p=p5sagit%2FDevel-REPL.git diff --git a/lib/Devel/REPL.pm b/lib/Devel/REPL.pm index ff461f5..a46fbbe 100644 --- a/lib/Devel/REPL.pm +++ b/lib/Devel/REPL.pm @@ -2,7 +2,10 @@ package Devel::REPL; use Term::ReadLine; use Moose; -use namespace::clean; +use namespace::clean -except => [ 'meta' ]; +use 5.008001; # backwards compat, doesn't warn like 5.8.1 + +our $VERSION = '1.002001'; # 1.2.1 with 'MooseX::Object::Pluggable'; @@ -33,7 +36,13 @@ sub run_once { my $line = $self->read; return unless defined($line); # undefined value == EOF my @ret = $self->eval($line); - $self->print(@ret); + eval { + $self->print(@ret); + }; + if ($@) { + my $error = $@; + eval { $self->print("Error printing! - $error\n"); }; + } return 1; } @@ -51,9 +60,9 @@ sub eval { } sub compile { - my ($self, $line) = @_; - my $compiled = eval $self->wrap_as_sub($line); - return (undef, $self->error_return("Compile error", $@)) if $@; + my $_REPL = shift; + my $compiled = eval $_REPL->wrap_as_sub($_[0]); + return (undef, $_REPL->error_return("Compile error", $@)) if $@; return $compiled; } @@ -68,9 +77,9 @@ sub mangle_line { } sub execute { - my $REPL = shift; - my @ret = eval { shift->(@_) }; - return $REPL->error_return("Runtime error", $@) if $@; + my ($self, $to_exec, @args) = @_; + my @ret = eval { $to_exec->(@args) }; + return $self->error_return("Runtime error", $@) if $@; return @ret; } @@ -82,7 +91,49 @@ sub error_return { sub print { my ($self, @ret) = @_; my $fh = $self->out_fh; + no warnings 'uninitialized'; print $fh "@ret"; + print $fh "\n" if $self->term->ReadLine =~ /Gnu/; } +=head1 NAME + +Devel::REPL - a modern perl interactive shell + +=head1 SYNOPSIS + + my $repl = Devel::REPL->new; + $repl->load_plugin($_) for qw(History LexEnv); + $repl->run + +Alternatively, use the 're.pl' script installed with the distribution + + system$ re.pl + +=head1 AUTHOR + +Matt S Trout - mst (at) shadowcatsystems.co.uk (L) + +=head1 CONTRIBUTORS + +=over 4 + +=item Stevan Little - stevan (at) iinteractive.com + +=item Alexis Sukrieh - sukria+perl (at) sukria.net + +=item epitaph + +=item mgrimes - mgrimes (at) cpan dot org + +=item Shawn M Moore - sartak (at) gmail.com + +=back + +=head1 LICENSE + +This library is free software under the same terms as perl itself + +=cut + 1;