5 use namespace::clean -except => [ 'meta' ];
6 use 5.008001; # backwards compat, doesn't warn like 5.8.1
8 our $VERSION = '1.002001'; # 1.2.1
10 with 'MooseX::Object::Pluggable';
12 use Devel::REPL::Error;
15 is => 'rw', required => 1,
16 default => sub { Term::ReadLine->new('Perl REPL') }
20 is => 'rw', required => 1,
21 default => sub { '$ ' }
25 is => 'rw', required => 1, lazy => 1,
26 default => sub { shift->term->OUT || \*STDOUT; }
31 while ($self->run_once_safely) {
37 my ($self, @args) = @_;
39 my $ret = eval { $self->run_once(@args) };
43 eval { $self->print("Error! - $error\n"); };
53 my $line = $self->read;
54 return unless defined($line); # undefined value == EOF
56 my @ret = $self->formatted_eval($line);
64 my ( $self, @args ) = @_;
66 my @ret = $self->eval(@args);
68 return $self->format(@ret);
72 my ( $self, @stuff ) = @_;
74 if ( $self->is_error($stuff[0]) ) {
75 return $self->format_error(@stuff);
77 return $self->format_result(@stuff);
82 my ( $self, @stuff ) = @_;
88 my ( $self, $error ) = @_;
89 return $error->stringify;
93 my ( $self, $thingy ) = @_;
94 blessed($thingy) and $thingy->isa("Devel::REPL::Error");
99 return $self->term->readline($self->prompt);
103 my ($self, $line) = @_;
104 my $compiled = $self->compile($line);
105 return $compiled unless defined($compiled) and not $self->is_error($compiled);
106 return $self->execute($compiled);
110 my ( $_REPL, @args ) = @_;
111 my $compiled = eval $_REPL->wrap_as_sub(@args);
112 return $_REPL->error_return("Compile error", $@) if $@;
117 my ($self, $line, %args) = @_;
118 return qq!sub {\n!. ( $args{no_mangling} ? $line : $self->mangle_line($line) ).qq!\n}\n!;
122 my ($self, $line) = @_;
127 my ($self, $to_exec, @args) = @_;
128 my @ret = eval { $to_exec->(@args) };
129 return $self->error_return("Runtime error", $@) if $@;
134 my ($self, $type, $error) = @_;
135 return Devel::REPL::Error->new( type => $type, message => $error );
139 my ($self, @ret) = @_;
140 my $fh = $self->out_fh;
141 no warnings 'uninitialized';
143 print $fh "\n" if $self->term->ReadLine =~ /Gnu/;
148 Devel::REPL - a modern perl interactive shell
152 my $repl = Devel::REPL->new;
153 $repl->load_plugin($_) for qw(History LexEnv);
156 Alternatively, use the 're.pl' script installed with the distribution
162 Matt S Trout - mst (at) shadowcatsystems.co.uk (L<http://www.shadowcatsystems.co.uk/>)
168 =item Stevan Little - stevan (at) iinteractive.com
170 =item Alexis Sukrieh - sukria+perl (at) sukria.net
174 =item mgrimes - mgrimes (at) cpan dot org
176 =item Shawn M Moore - sartak (at) gmail.com
182 This library is free software under the same terms as perl itself