X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit%2FDevel-REPL.git;a=blobdiff_plain;f=lib%2FDevel%2FREPL.pm;h=9cddd533b690fa3a96b9c87651b513e8224bb63e;hp=2e698910feb81d99438a578ae9d735e81b25ed60;hb=8d5343b5f1fb9e3b33d1d36e96aabc94e29a822b;hpb=f47911153306db973583f228e32de560907c943b diff --git a/lib/Devel/REPL.pm b/lib/Devel/REPL.pm index 2e69891..9cddd53 100644 --- a/lib/Devel/REPL.pm +++ b/lib/Devel/REPL.pm @@ -2,32 +2,32 @@ package Devel::REPL; 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.003013'; - with 'MooseX::Object::Pluggable'; use Devel::REPL::Error; has 'term' => ( - is => 'rw', required => 1, + is => 'rw', + lazy => 1, 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', required => 1, + is => 'rw', default => sub { 0 } ); @@ -199,7 +199,8 @@ which means a single statement doesn't require the semicolon. You can add one if you like, though. If you followed the first example in the L above, you'll have the -History and LexEnv plugins loaded (and there are many more available). +L and L +plugins loaded (and there are many more available). Although the shell might support "up-arrow" history, the History plugin adds "bang" history to that so you can re-execute chosen commands (with e.g. C). The LexEnv plugin ensures that lexical variables declared with the @@ -245,7 +246,7 @@ filename like so: system$ re.pl --rcfile myproject.pc -If the filename happens to contain a forwardslash, then it's used absolutely, +If the filename happens to contain a forward slash, then it's used absolutely, or realive to the current working directory: system$ re.pl --rcfile /path/to/my/project/repl.rc @@ -259,7 +260,9 @@ To allow for the sharing of run control files, you can fashion them into a Perl module for distribution (perhaps via the CPAN). For more information on this feature, please see the L manual page. -A default profile ships with C; it loads the following plugins: +A C profile ships with C; it loads the following plugins +(note that some of these require optional features -- or you can also use the +C profile): =over 4 @@ -319,7 +322,7 @@ L =head2 Plugins -Plugins are a way to add funcionality to the REPL shell, and take advantage of +Plugins are a way to add functionality to the REPL shell, and take advantage of C being based on the L object system for Perl 5. This means it's simple to 'hook into' many steps of the R-E-P-L process. Plugins can change the way commands are interpreted, or the way their results are @@ -327,7 +330,7 @@ output, or even add commands to the shell environment. A number of plugins ship with C, and more are available on the CPAN. Some of the shipped plugins are loaded in the default profile, mentioned -above. These plugins can be loaded in your C<< $HOME/.re.pl/repl.rc >> like: +above. These plugins can be loaded in your F< $HOME/.re.pl/repl.rc > like: load_plugin qw( CompletionDriver::Global DumpHistory ); @@ -353,94 +356,37 @@ control files have already been executed: 1 $_ -=head1 REQUIREMENTS - -In addition to the contents of the standard Perl distribution, you will need -the following: - -=over 4 - -=item * - -L >= 0.74 - -=item * - -L >= 0.0009 - -=item * - -L >= 0.18 - -=item * - -L >= 0.16 - -=item * - -L - -=item * - -L - -=item * - -L - -=item * - -L +=head1 OPTIONAL FEATURES -=item * +In addition to the prerequisites declared in this distribution, which should be automatically installed by your L client, there are a number of optional features, used by +additional plugins. You can install any of these features by installing this +distribution interactively (e.g. C). -L - -=item * - -L - -=back - -Optionally, some plugins if installed will require the following modules: +=for comment I hope to automatically generate this data via a Pod::Weaver section =over 4 -=item * - -L - -=item * - -L +=item * Completion plugin - extensible tab completion -=item * +=item * DDS plugin - better format results with Data::Dump::Streamer -L +=item * DDC plugin - even better format results with Data::Dumper::Concise -=item * +=item * INC completion driver - tab complete module names in use and require -L +=item * Interrupt plugin - traps SIGINT to kill long-running lines -=item * +=item * Keywords completion driver - tab complete Perl keywords and operators -L +=item * LexEnv plugin - variables declared with "my" persist between statements -=item * +=item * MultiLine::PPI plugin - continue reading lines until all blocks are closed -L +=item * Nopaste plugin - upload a session\'s input and output to a Pastebin -=item * +=item * PPI plugin - PPI dumping of Perl code -L - -=item * - -L - -=item * - -L +=item * Refresh plugin - automatically reload libraries with Module::Refresh =back @@ -472,6 +418,8 @@ Matt S Trout - mst (at) shadowcatsystems.co.uk (L >> + =back =head1 LICENSE