How can I start an interactive console for Perl, similar to the irb
command for Ruby or python
for Python?
I use the command line as a console:
$ perl -e 'print "JAPH\n"'
Then I can use my bash history to get back old commands. This does not preserve state, however.
This form is most useful when you want to test "one little thing" (like when answering Perl questions). Often, I find these commands get scraped verbatim into a shell script or makefile.
perl -d
is your friend:
% perl -de 0
Update: I've since created a downloadable REPL - see my other answer.
With the benefit of hindsight:
rlwrap
, which provides readline support to any command, you can combine it with a simple Perl command to create a usable REPL, and thus make do without third-party REPL solutions.
rlwrap
via Homebrew with brew install rlwrap
.rlwrap
via their respective package managers; e.g., on Ubuntu, use sudo apt-get install rlwrap
.rlwrap
and a Perl command.What you do NOT get with Ján's answer:
The only third-party solution that offers these (with non-trivial installation + additional, non-obvious steps), is psh, but:
it hasn't seen activity in around 2.5 years
its focus is different in that it aims to be a full-fledged shell replacement, and thus works like a traditional shell, which means that it doesn't automatically evaluate a command as a Perl statement, and requires an explicit output command such as print
to print the result of an expression.
Ján Sáreník's answer can be improved in one way:
If you install the Data::Printer
module with [sudo] cpan Data::Printer
as a one-time operation, you can load it into the REPL for use of the p()
function, to which you can pass lists/arrays/hashtables for enumeration.
Here's an alias named iperl
with readline and Data::Printer
support, which can you put in your POSIX-like shell's initialization file (e.g., ~/.bashrc
):
alias iperl='rlwrap -A -S "iperl> " perl -MData::Printer -wnE '\''BEGIN { say "# Use `p @<arrayOrList>` or `p %<hashTable>` to print arrays/lists/hashtables; e.g.: `p %ENV`"; } say eval()//$@'\'
E.g., you can then do the following to print all environment variables via hashtable %ENV
:
$ iperl # start the REPL
iperl> p %ENV # print key-value pairs in hashtable %ENV
As with Ján's answer, the scalar result of an expression is automatically printed; e.g.:
iperl> 22 / 7 # automatically print scalar result of expression: 3.14285714285714
Perl doesn't have a console but the debugger can be used as one. At a command prompt, type perl -de 1
. (The value "1" doesn't matter, it's just a valid statement that does nothing.)
There are also a couple of options for a Perl shell.
For more information read perlfaq3.
You can do it online (like many things in life) here:
https://www.tutorialspoint.com/execute_perl_online.php
There are two popular Perl REPLs.