|
NAMEDevel::REPL::Overview - overview of Devel::REPL. DESCRIPTIONWhat is a console? How it can assist you?Most modern languages have consoles. The console is an interactive tool that evaluates your input while you type it. It gives you several advantages:
For Ruby it would be irb, for Python is... python by itself and for perl... and there was nothing for perl (except that ugly perl -d -e "" and several failed projects) until Devel::REPL was written by Matt S Trout (a.k.a. mst) from ShadowCatSystems <http://www.shadowcatsystems.co.uk>. Devel::REPL - the Perl consoleREPL stands for Read, Evaluate, Print, Loop. Lets install and try it. $ cpan Devel::REPL After installation you have a lot of new modules, but the most interesting things are:
And a bunch of plugins (I'll describe them later). In command line type: $ re.pl If everything is ok you'll see a prompt (underlined $). That's it. You can start typing expressions. An example session: $ sub factorial {
> my $number = shift;
> return $number > 1 ? $number * factorial($number-1) : $number;
> }
$ factorial 1 # by the way, comments are allowed
1 # our return value
$ factorial 5
120
$ [1,2,3,4,5,6,7]
$ARRAY1 = [
1,
2,
3, # return values are printed with Data::Dumper::Streamer.
4, # See Plugins section
5,
6,
7
];
$ {apple=>1,fruit=>'apple',cart=>['apple','banana']}
$HASH1 = {
apple => 1,
cart => [
'apple',
'banana'
],
fruit => 'apple'
};
$ package MyPackage; # create a package
$ sub say_hi { # define a sub
> print "Hi!\n";
> } # statement is evaluated only after we've finished typing block.
# See Plugins section.
> __PACKAGE__
MyPackage
> package main;
> __PACKAGE_
main
> MyPackage->say_hi
Hi!
1
$
Control files a.k.a. I don't want to type it every timeDevel::REPL has a control files feature. Control files are evaluated on session start in the same way as you would type them manually in the console. The default control file is located at $HOME/.re.pl/repl.rc. You can store there any statements you would normally type in. I.e. my $HOME/.re.pl/repl.rc has next lines: use feature 'say'; # to don't write \n all the time
use Data::Dumper;
# pretty print data structures
sub pp { print Data::Dumper->Dump([@_]) }
You can have multiple control files and they can be anywhere in the file system. To make re.pl use some rc-file other than repl.rc, call it like this: $ re.pl --rcfile /path/to/your/rc.file If your rc-file is in $HOME/.re.pl directory, you can omit the path: $ re.pl --rcfile rc.file If you have rc-file with the same name in current directory and you don't want to type path, you can: $ re.pl --rcfile ./rc.file I want it to bark, fly, jump and swim! or PluginsPlugins extend functionality and change behavior of Devel::REPL. Bundled plugins are:
There are lots of contributed plugins you can find at CPAN. ProfilesIf plugins change and extend functionality of Devel::REPL, profiles are changing your environment (loaded plugins, constants, subs and etc.). For example, the Minimal profile, Devel::REPL::Profile::Minimal: package Devel::REPL::Profile::Minimal;
use Moose; ### advanced OOP system for Perl
### keep those exports/imports out of our namespace
use namespace::autoclean;
with 'Devel::REPL::Profile'; ## seem perldoc Muse
sub plugins { ### plugins we want to be loaded
qw(History LexEnv DDS Packages Commands MultiLine::PPI);
}
### the only required sub for profile,
### it is called on profile activation
sub apply_profile {
my ($self, $repl) = @_;
### $self - no comments, $repl - current instance of Devel::REPL
$repl->load_plugin($_) for $self->plugins; ### load our plugins
}
1;
There is also the StandardDevel::REPL::Profile::Standard profile, which contains a number of optional (yet very useful) features. To enable some profile use the "--profile" switch: $ re.pl --profile SomeProfile Alternatively, you can set the environment variable "DEVEL_REPL_PROFILE" to "SomeProfile", or set the "profile" key in your "rcfile" (see Devel::REPL for more information). SEE ALSO
|