|
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
Visit the GSP FreeBSD Man Page Interface. |