Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Devel::REPL(3)	      User Contributed Perl Documentation	Devel::REPL(3)

NAME
       Devel::REPL - A modern perl interactive shell

VERSION
       version 1.003028

SYNOPSIS
	 my $repl = Devel::REPL->new;
	 $repl->load_plugin($_)	for qw(History LexEnv);
	 $repl->run

       Alternatively, use the 're.pl' script installed with the	distribution

	 system$ re.pl

DESCRIPTION
       This is an interactive shell for	Perl, commonly known as	a REPL - Read,
       Evaluate, Print,	Loop. The shell	provides for rapid development or
       testing of code without the need	to create a temporary source code
       file.

       Through a plugin	system,	many features are available on demand. You can
       also tailor the environment through the use of profiles and run control
       files, for example to pre-load certain Perl modules when	working	on a
       particular project.

USAGE
       To start	a shell, follow	one of the examples in the "SYNOPSIS" above.

       Once running, the shell accepts and will	attempt	to execute any code
       given. If the code executes successfully	you'll be shown	the result,
       otherwise an error message will be returned. Here are a few examples:

	$_ print "Hello, world!\n"
	Hello, world!
	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 ("Hello,
       world!"), if any, and then the return value of the statement (1).
       Following that example, an error	is returned when the execution of some
       code fails.

       Note that the lack of semicolon on the end is not a mistake - the code
       is run inside a Block structure (to protect the REPL in case the	code
       blows up), 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	"SYNOPSIS" above, you'll have
       the History and LexEnv 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.  "!53"). The	LexEnv plugin ensures that lexical
       variables declared with the "my"	keyword	will automatically persist
       between statements executed in the REPL shell.

       When you	"use" any Perl module, the "import()" will work	as expected -
       the exported functions from that	module are available for immediate
       use:

	$_ carp	"I'm dieeeing!\n"
	String found where operator expected at	(eval 129) line	5, near	"carp "I'm dieeeing!\n""
		(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

	$_ carp	"I'm dieeeing!\n"
	I'm dieeeing!
	 at /usr/share/perl5/Lexical/Persistence.pm line 327
	1
	$_

       To quit from the	shell, hit "Ctrl+D" or "Ctrl+C".

	 MSWin32 NOTE: control keys won't work if TERM=dumb
	 because readline functionality	will be	disabled.

   Run Control Files
       For particular projects you might well end up running the same commands
       each time the REPL shell	starts up - loading Perl modules, setting
       configuration, and so on. A run control file lets you have this done
       automatically, and you can have multiple	files for different projects.

       By default the "re.pl" program looks for	"$HOME/.re.pl/repl.rc",	and
       runs whatever code is in	there as if you	had entered it at the REPL
       shell yourself.

       To set a	new run	control	file that's also in that directory, pass it as
       a filename like so:

	system$	re.pl --rcfile myproject.pc

       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

       Within the run control file you might want to load plugins. This	is
       covered in "The REPL shell object" section, below.

   Profiles
       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 Devel::REPL::Profile	manual
       page.

       A "Standard" profile ships with "Devel::REPL"; it loads the following
       plugins (note that some of these	require	optional features -- or	you
       can also	use the	"Minimal" profile):

       o   Devel::REPL::Plugin::History

       o   Devel::REPL::Plugin::LexEnv

       o   Devel::REPL::Plugin::DDS

       o   Devel::REPL::Plugin::Packages

       o   Devel::REPL::Plugin::Commands

       o   Devel::REPL::Plugin::MultiLine::PPI

       o   Devel::REPL::Plugin::Colors

       o   Devel::REPL::Plugin::Completion

       o   Devel::REPL::Plugin::CompletionDriver::INC

       o   Devel::REPL::Plugin::CompletionDriver::LexEnv

       o   Devel::REPL::Plugin::CompletionDriver::Keywords

       o   Devel::REPL::Plugin::CompletionDriver::Methods

       o   Devel::REPL::Plugin::ReadlineHistory

   Plugins
       Plugins are a way to add	functionality to the REPL shell, and take
       advantage of "Devel::REPL" being	based on the Moose 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 output, or	even add commands to the shell
       environment.

       A number	of plugins ship	with "Devel::REPL", 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
       $HOME/.re.pl/repl.rc  like:

	 load_plugin qw( CompletionDriver::Global DumpHistory );

       Writing your own	plugins	is not difficult, and is discussed in the
       Devel::REPL::Plugin manual page,	along with links to the	manual pages
       of all the plugins shipped with "Devel::REPL".

   The REPL shell object
       From time to time you'll	want to	interact with or manipulate the
       "Devel::REPL" shell object itself; that is, the instance	of the shell
       you're currently	running.

       The object is always available through the $_REPL variable. One common
       requirement is to load an additional plugin, after your profile and run
       control files have already been executed:

	$_ $_REPL->load_plugin('Timing');
	1
	$_ print "Hello	again, world!\n"
	Hello again, world!
	Took 0.00148296356201172 seconds.
	1
	$_

OPTIONAL FEATURES
       In addition to the prerequisites	declared in this distribution, which
       should be automatically installed by your CPAN 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. "cpanm --interactive	Devel::REPL").

       o   Completion plugin - extensible tab completion

       o   DDS plugin -	better format results with Data::Dump::Streamer

       o   DDC plugin -	even better format results with	Data::Dumper::Concise

       o   INC completion driver - tab complete	module names in	use and
	   require

       o   Interrupt plugin - traps SIGINT to kill long-running	lines

       o   Keywords completion driver -	tab complete Perl keywords and
	   operators

       o   LexEnv plugin - variables declared with "my"	persist	between
	   statements

       o   MultiLine::PPI plugin - continue reading lines until	all blocks are
	   closed

       o   Nopaste plugin - upload a session\'s	input and output to a Pastebin

       o   PPI plugin -	PPI dumping of Perl code

       o   Refresh plugin - automatically reload libraries with
	   Module::Refresh

SEE ALSO
       o   A comparison	of various REPLs <http://shadow.cat/blog/matt-s-
	   trout/mstpan-17/>

SUPPORT
       Bugs may	be submitted through the RT bug	tracker
       <https://rt.cpan.org/Public/Dist/Display.html?Name=Devel-REPL> (or
       bug-Devel-REPL@rt.cpan.org <mailto:bug-Devel-REPL@rt.cpan.org>).

       There is	also an	irc channel available for users	of this	distribution,
       at "#devel" on "irc.perl.org" <irc://irc.perl.org/#devel-repl>.

AUTHOR
       Matt S Trout - mst (at) shadowcatsystems.co.uk
       (<http://www.shadowcatsystems.co.uk/>)

CONTRIBUTORS
       o   Karen Etheridge <ether@cpan.org>

       o   Shawn M Moore <code@sartak.org>

       o   Chris Marshall <devel.chm.01@gmail.com>

       o   Matt	S Trout	<mst@shadowcat.co.uk>

       o   Oliver Gorwits <oliver@cpan.org>

       o   xxxx	x<section>xx'xx	(Yuval Kogman) <nothingmuch@woobling.org>

       o   Arthur Axel 'fREW' Schmidt <frioux@gmail.com>

       o   Andrew Moore	<amoore@cpan.org>

       o   Alexis Sukrieh <sukria+perl@sukria.net>

       o   Tomas Doran (t0m) <bobtfish@bobtfish.net>

       o   epitaph <unknown>

       o   Norbert Buchmuller <norbi@nix.hu>

       o   Jesse Luehrs	<doy@tozt.net>

       o   Dave	Houston	<dhouston@cpan.org>

       o   Dagfinn Ilmari MannsAYker <ilmari@ilmari.org>

       o   Zakariyya Mughal <zaki.mughal@gmail.com>

       o   Ryan	Niebur <ryan@debian.org>

       o   Justin Hunter <justin.d.hunter@gmail.com>

       o   Ash Berlin <ash_github@firemirror.com>

       o   naquad <naquad@bd8105ee-0ff8-0310-8827-fb3f25b6796d>

       o   Stevan Little <stevan.little@iinteractive.com>

COPYRIGHT AND LICENCE
       This software is	copyright (c) 2007 by Matt S Trout - mst (at)
       shadowcatsystems.co.uk (<http://www.shadowcatsystems.co.uk/>).

       This is free software; you can redistribute it and/or modify it under
       the same	terms as the Perl 5 programming	language system	itself.

perl v5.32.0			  2016-02-16			Devel::REPL(3)

NAME | VERSION | SYNOPSIS | DESCRIPTION | USAGE | OPTIONAL FEATURES | SEE ALSO | SUPPORT | AUTHOR | CONTRIBUTORS | COPYRIGHT AND LICENCE

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=Devel::REPL&sektion=3&manpath=FreeBSD+12.2-RELEASE+and+Ports>

home | help