我该如何启动Perl的交互式控制台,类似于Ruby中的irb
命令或Python中的python
命令?
我该如何启动Perl的交互式控制台,类似于Ruby中的irb
命令或Python中的python
命令?
perl -de 1
。(值“1”无关紧要,它只是一个有效的不起作用的语句。)Devel::REPL的re.pl
我一直都这样做:
rlwrap perl -wlne'eval;print$@if$@'
在5.10版本中,我已经切换到:
rlwrap perl -wnE'say eval()//$@'
perl -d
is your friend:
% perl -de 0
更新:我已经创建了一个可下载的REPL - 参见我的其他答案。
回顾过去:
rlwrap
,它为任何命令提供readline支持,你可以将它与简单的Perl命令相结合,从而创建一个可用的REPL,因此无需使用第三方REPL解决方案。
rlwrap
,方法是运行brew install rlwrap
。rlwrap
;例如,在Ubuntu上,使用sudo apt-get install rlwrap
。rlwrap
和Perl命令的结合。Ján的答案中没有的内容:
唯一提供这些功能的第三方解决方案(需要安装和附加的复杂步骤),是psh,但:
它已经有大约2.5年没更新了
它的重点不同,因为它旨在成为一个完整的shell替代品,因此像传统的shell一样工作,这意味着它不会自动将命令评估为Perl语句,并且需要显式的输出命令,如print
来打印一个表达式的结果。
Ján Sáreník的答案可以通过以下方式改进:
[sudo] cpan Data::Printer
安装Data::Printer
模块,并将其加载到REPL中,以使用p()
函数,并且您可以将列表/数组/哈希表传递给它进行枚举。iperl
,支持readline和Data::Printer
,您可以将其放在类POSIX的shell初始化文件(例如~/.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()//$@'\'
%ENV
打印所有环境变量,方法如下:$ iperl # start the REPL
iperl> p %ENV # print key-value pairs in hashtable %ENV
iperl> 22 / 7 # automatically print scalar result of expression: 3.14285714285714
读取-求值-输出循环:
$ perl -e'while(<>){print eval,"\n"}'
在 Debian/Ubuntu 系统下:
$ sudo apt-get install libdevel-repl-perl
$ re.pl
$ sudo apt-get install libapp-repl-perl
$ iperl
Matt Trout的概述列出了5个选择,从perl -de 0
开始,他推荐Reply
,如果通过插件扩展性很重要,或者Eval::withLexicals
中的tinyrepl
,为了提供包括readline支持和词法持久性在内的极简、纯Perl解决方案。
如果您使用GNU Guix软件包管理器,则可以使用以下命令进入tinyrepl的工作环境:
$ guix shell perl perl-eval-withlexicals perl-term-readline-gnu
[env]$ tinyrepl
re.pl$ 'hello world!'
"hello world!"