use Term::ReadLine;
use Moose;
-use namespace::clean -except => [ 'meta' ];
+use namespace::autoclean;
use 5.008001; # backwards compat, doesn't warn like 5.8.1
-our $VERSION = '1.003003'; # 1.3.3
+our $VERSION = '1.003017';
with 'MooseX::Object::Pluggable';
use Devel::REPL::Error;
has 'term' => (
- is => 'rw', required => 1,
+ is => 'rw',
default => sub { Term::ReadLine->new('Perl REPL') }
);
has 'prompt' => (
- is => 'rw', required => 1,
+ is => 'rw',
default => sub { '$ ' }
);
has 'out_fh' => (
- is => 'rw', required => 1, lazy => 1,
+ is => 'rw',
+ lazy => 1,
default => sub { shift->term->OUT || \*STDOUT; }
);
+has 'exit_repl' => (
+ is => 'rw',
+ default => sub { 0 }
+);
+
sub run {
my ($self) = @_;
while ($self->run_once_safely) {
- # keep looping
+ # keep looping unless we want to exit REPL
+ last if $self->exit_repl;
}
}
my ($self) = @_;
my $line = $self->read;
- return unless defined($line); # undefined value == EOF
+ return unless defined($line); # undefined value == EOF
my @ret = $self->formatted_eval($line);
- $self->print(@ret);
+ $self->print(@ret) unless $self->exit_repl;
return 1;
}
1
$_ nosuchfunction
Compile error: Bareword "nosuchfunction" not allowed while "strict subs" in use at (eval 130) line 5.
-
- $_
+
+ $_
In the first example above you see the output of the command (C<Hello,
world!>), if any, and then the return value of the statement (C<1>). Following
(Do you need to predeclare carp?)
Compile error: syntax error at (eval 129) line 5, near "carp "I'm dieeeing!\n""
BEGIN not safe after errors--compilation aborted at (eval 129) line 5.
-
- $_ use Carp
-
+
+ $_ use Carp
+
$_ carp "I'm dieeeing!\n"
I'm dieeeing!
at /usr/share/perl5/Lexical/Persistence.pm line 327
1
- $_
+ $_
+
+To quit from the shell, hit C<Ctrl+D> or C<Ctrl+C>.
+
+ MSWin32 NOTE: control keys won't work if TERM=dumb
+ because readline functionality will be disabled.
-To quit from the shell, hit C<control+d> or C<control+c>.
=head2 Run Control Files
L<Devel::REPL::Plugin::MultiLine::PPI>
+=item *
+
+L<Devel::REPL::Plugin::Colors>
+
+=item *
+
+L<Devel::REPL::Plugin::Completion>
+
+=item *
+
+L<Devel::REPL::Plugin::CompletionDriver::INC>
+
+=item *
+
+L<Devel::REPL::Plugin::CompletionDriver::LexEnv>
+
+=item *
+
+L<Devel::REPL::Plugin::CompletionDriver::Keywords>
+
+=item *
+
+L<Devel::REPL::Plugin::CompletionDriver::Methods>
+
+=item *
+
+L<Devel::REPL::Plugin::ReadlineHistory>
+
=back
=head2 Plugins
A number of plugins ship with C<Devel::REPL>, and more are available on the
CPAN. Some of the shipped plugins are loaded in the default profile, mentioned
-above.
+above. These plugins can be loaded in your C<< $HOME/.re.pl/repl.rc >> like:
+
+ load_plugin qw( CompletionDriver::Global DumpHistory );
Writing your own plugins is not difficult, and is discussed in the
L<Devel::REPL::Plugin> manual page, along with links to the manual pages of
=item *
-L<Moose> >= 0.64
+L<Moose> >= 0.74
=item *
=item *
-L<MooseX::Getopt> >= 0.15
+L<MooseX::Getopt> >= 0.18
=item *
-L<MooseX::AttributeHelpers> >= 0.14
+L<namespace::autoclean>
=item *
-L<namespace::clean>
+L<File::HomeDir>
=item *
-L<File::HomeDir>
+L<Task::Weaken>
=item *
-L<Task::Weaken>
+L<B::Concise>
+
+=item *
+
+L<Term::ANSIColor>
+
+=item *
+
+L<Devel::Peek>
=back
=item *
+L<Data::Dumper::Concise>
+
+=item *
+
L<File::Next>
=item *
+L<Sys::SigAction>
+
+=item *
+
L<B::Keywords>
=item *
=item Oliver Gorwits - oliver on irc.perl.org
+=item Andrew Moore - C<< <amoore@cpan.org> >>
+
+=item Norbert Buchmuller C<< <norbi@nix.hu> >>
+
+=item Dave Houston C<< <dhouston@cpan.org> >>
+
+=item Chris Marshall
+
=back
=head1 LICENSE