如何启动Perl的交互式控制台?

313

我该如何启动Perl的交互式控制台,类似于Ruby中的irb命令或Python中的python命令?

24个回答

9

请参见 https://dev59.com/ZnVD5IYBdhLWcg3wI4CM#73703。 - U. Windl

7

Devel::REPL的re.pl


7

我一直都这样做:

rlwrap perl -wlne'eval;print$@if$@'

在5.10版本中,我已经切换到:

rlwrap perl -wnE'say eval()//$@'

(rlwrap是可选的)

7

perl -d is your friend:

% perl -de 0

请见 https://dev59.com/ZnVD5IYBdhLWcg3wI4CM#73703。 - U. Windl

6
你可以在这里了解psh:http://gnp.github.io/psh/ 它是一个完整的shell(你可以用它来替代bash),但使用Perl语法,所以你可以随时创建方法等。

5

更新:我已经创建了一个可下载的REPL - 参见我的其他答案

回顾过去:

  • 现有答案中提到的第三方解决方案要么安装麻烦和/或需要额外的复杂步骤才能正常工作 - 有些解决方案看起来至少被半废弃了。
  • 可用的REPL需要readline库来支持命令行编辑键盘支持和历史支持 - 对于许多第三方解决方案来说,保证这一点是一个麻烦点。
  • 如果你安装CLI rlwrap,它为任何命令提供readline支持,你可以将它与简单的Perl命令相结合,从而创建一个可用的REPL,因此无需使用第三方REPL解决方案。
    • 在OSX上,你可以通过Homebrew安装rlwrap,方法是运行brew install rlwrap
    • Linux发行版应该通过它们各自的包管理器提供rlwrap;例如,在Ubuntu上,使用sudo apt-get install rlwrap
    • 参见Ján Sáreník的答案,了解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

与 Ján 的回答类似,一个表达式的 标量 结果会被 自动 打印出来;例如:
iperl> 22 / 7  # automatically print scalar result of expression: 3.14285714285714

5

读取-求值-输出循环:

$ perl -e'while(<>){print eval,"\n"}'

4

在 Debian/Ubuntu 系统下:

$ sudo apt-get install libdevel-repl-perl
$ re.pl

$ sudo apt-get install libapp-repl-perl
$ iperl

4

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!"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接