Jesse Luehrs > Devel-REPL-1.003012 > Devel::REPL::Overview


Annotate this POD


New  6
Open  19
Stalled  2
View/Report Bugs
Source   Latest Release: Devel-REPL-1.003027


Devel::REPL::Overview - overview of Devel::REPL.


What is a console? How it can assist you?

  Most modern languages have consoles. 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 byitself 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

Devel::REPL - the Perl console

REPL 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:


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


  $ [1,2,3,4,5,6,7]
  $ARRAY1 = [
              3, # return values are printed with Data::Dumper::Streamer.
              4, # See Plugins section

  $ {apple=>1,fruit=>'apple',cart=>['apple','banana']}
  $HASH1 = {
            apple => 1,
            cart  => [
            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__
  > package main;

  > __PACKAGE_
  > MyPackage->say_hi

Control files a.k.a. I don't want to type it every time

Devel::REPL has control files feature. Control files are evaluated on session start in the same way as you would type them manually in console.

Default control file is located at `$HOME/` .

You can store there any statements you would normally type in.

I.e. my `$HOME/` 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 use some rc-file other than repl.rc call it like this:

      $ --rcfile /path/to/your/rc.file

If your rc-file is in `$HOME/` directory, you can omit path:

      $ --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:

      $ --rcfile ./rc.file

I want it to bark, fly, jump and swim! or Plugins

Plugins extend functionality and change behavor of Devel::REPL. Bundled plugins are:

There are lots of contributed plugins you can find at CPAN.

Profiles ^

If plugins change and extend functionality of Devel::REPL, profiles are changing your environment (loaded plugins, constants, subs and etc.).

There's only one bundled profile called `Devel::REPL::Profile::Default`, lets take a look at it:

      package Devel::REPL::Profile::Default;

      use Moose; ### advanced OOP system for Perl

      ### keep those exports/imports out of our namespace
      use namespace::clean -except => [ 'meta' ];

      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


At the moment there are no profiles on CPAN. Mostly you'll use control files. To enable some profile use --profile switch:

      $ --profile SomeProfile

See Also ^

Devel::REPL, Devel::REPL::Plugin, Devel::REPL::Profile

syntax highlighting: