Shell::Perl - A read-eval-loop in Perl
use Shell::Perl; Shell::Perl->run_with_args;
This is the implementation of a command-line interpreter for Perl. I wrote this because I was tired of using irb when needing a calculator with a real language within. Ah, that and because it was damn easy to write it.
This module is the heart of the pirl script provided with Shell-Perl distribution, along with this module.
$ pirl Welcome to the Perl shell. Type ':help' for more information pirl @> 1+1 2 pirl @> use YAML qw(Load Dump); () pirl @> $data = Load("--- { a: 1, b: [ 1, 2, 3] }\n"); { a => 1, b => [1, 2, 3] } pirl @> $var = 'a 1 2 3'; $var =~ /(\w+) (\d+) (\d+)/ ("a", 1, 2) pirl @> :q
Most of the time, the shell reads Perl statements, evaluates them and outputs the result.
There are a few commands (started by ':') that are handled by the shell itself.
Handy for remembering what the shell commands are.
Leave the shell. The Perl statement exit will work too.
exit
SYNONYMS: :exit
Changes the dumper for the expression results used before output. The current supported are:
Data::Dump, the default
Data::Dump
Data::Dumper, the good and old core module
Data::Dumper
YAML
Changes the default context used to evaluate the entered expression. The default is 'list'.
'list'
Intuitively, 'scalar', 's' and '$' are synonyms, just like 'list', 'l', and '@' or 'void', 'v', '_'.
There is a nice way to override the default context in a given expression. Just a '#' followed by one of 'scalar|list|void|s|l|v|$|@|_' at the end of the expression.
pirl @> $var = 'a 1 2 3'; $var =~ /(\w+) (\d+) (\d+)/ ("a", 1, 2) pirl @> $var = 'a 1 2 3'; $var =~ /(\w+) (\d+) (\d+)/ #scalar 1
Remember this is an alpha version, so the API may change and that includes the methods documented here. So consider this section as implementation notes for a while.
In later versions, some of these information may be promoted to a public status. Others may be hidden or changed and even disappear without further notice.
$sh = Shell::Version->new;
The constructor.
Shell::Perl->run_with_args;
Starts the read-eval-print loop after (possibly) reading options from @ARGV. It is a class method.
@ARGV
$sh->run;
The same as run_with_args but with no code for interpreting command-line arguments. It is an instance method, so that Shell::Perl-run_with_args> is kind of:
run_with_args
Shell::Perl-
Shell::Perl->new->run;
$answer = $sh->eval($exp); @answer = $sh->eval($exp);
Evaluates the user input given in $exp as Perl code and returns the result. That is the 'eval' part of the read-eval-print loop.
$exp
$sh->print(@args);
Prints a list of args at the output stream currently used by the shell. (It is just STDOUT by now.)
$sh->out($answer); $sh->out(@answers);
That corresponds to the 'print' in the read-eval-print loop. It outputs the evaluation result after passing it through the current dumper.
$sh->help;
Outputs the help as provided by the command ":help".
$sh->reset;
Does nothing by now, but it will.
$sh->set_ctx($context);
Assigns to the current shell context. The argument must be one of ( 'scalar', 'list', 'void', 's', 'l', 'v', '$', '@', '_' ) .
( 'scalar', 'list', 'void', 's', 'l', 'v', '$', '@', '_' )
$sh->set_out($dumper);
Changes the current dumper used for printing the evaluation results. Actually must be one of "D" (for Data::Dump), "DD" (for Data::Dumper) or "Y" (for YAML).
$prompt = $sh->prompt_title;
Returns the current prompt which changes with executable name and context. For example, "pirl @>", "pirl $>", and "pirl >".
There is a lot to do, as always. Some of the top priority tasks are:
Accept multiline statements;.
Refactor the code to promote easy customization of features.
This project is hosted at Google Code:
http://code.google.com/p/iperl/
To know about interactive Perl interpreters, there are two FAQS contained in perlfaq3 which are good starting points. Those are
How can I use Perl interactively? http://perldoc.perl.org/perlfaq3.html#How-can-I-use-Perl-interactively%3f Is there a Perl shell? http://perldoc.perl.org/perlfaq3.html#How-can-I-use-Perl-interactively%3f
An extra list of Perl shells can be found here:
http://www.focusresearch.com/gregor/document/psh-1.1.html#other_perl_shells
There are some quirks with Term::Readline (at least on Windows).
There are more bugs. I am lazy to collect them all and list them now.
Please report bugs via CPAN RT http://rt.cpan.org/NoAuth/Bugs.html?Dist=Shell-Perl.
Adriano R. Ferreira, <ferreira@cpan.org>
Caio Marcelo, <cmarcelo@gmail.com>
Copyright (C) 2007 by Adriano R. Ferreira
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Shell::Perl, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Shell::Perl
CPAN shell
perl -MCPAN -e shell install Shell::Perl
For more information on module installation, please visit the detailed CPAN module installation guide.