如何为Perl启动交互式控制台,类似于Ruby的irb
命令或Python的python
?
答案 0 :(得分:275)
答案 1 :(得分:59)
Matt Trout不仅写了一篇关于REPL的文章,他实际上写了一篇 - Devel::REPL
我已经使用了一点而且效果相当好,并且正在积极开发中。
顺便说一句,我不知道为什么有人对控制台上使用“perl -e”提到的人进行了修改。这不是真正的REPL,是的,但它非常有用,而且我一直都在使用它。答案 2 :(得分:34)
我写了一个我称之为“psh”的脚本:
#! /usr/bin/perl
while (<>) {
chomp;
my $result = eval;
print "$_ = $result\n";
}
无论你输入什么内容,它都会在Perl中进行评估:
> gmtime(2**30)
gmtime(2**30) = Sat Jan 10 13:37:04 2004
> $x = 'foo'
$x = 'foo' = foo
> $x =~ s/o/a/g
$x =~ s/o/a/g = 2
> $x
$x = faa
答案 3 :(得分:21)
如果您需要历史记录,请使用rlwrap。例如,这可能是您的~/bin/ips
:
#!/bin/sh
echo 'This is Interactive Perl shell'
rlwrap -A -pgreen -S"perl> " perl -wnE'say eval()//$@'
这就是它的样子:
$ ips
This is Interactive Perl shell
perl> 2**128
3.40282366920938e+38
perl>
答案 4 :(得分:20)
我认为你问的是perl的REPL(读取,评估,打印,循环)接口。有几种方法可以做到这一点:
答案 5 :(得分:19)
我使用命令行作为控制台:
$ perl -e 'print "JAPH\n"'
然后我可以使用 bash 历史来恢复旧命令。但是,这并不保留状态。
当您想要测试“一件小事”时(例如回答Perl问题时),此表单最有用。通常,我发现这些命令被逐字删除到shell脚本或makefile中。
答案 6 :(得分:15)
没有像Python那样内置Perl的交互式控制台。但是,您可以使用Perl调试器来调试相关的事情。你用-d选项打开它,但你可能想看看'man perldebug'来了解它。
经过一些谷歌搜索后,有一个单独的项目实现了一个Perl控制台,你可以在 http://www.sukria.net/perlconsole.html找到它。
希望这有帮助!
答案 7 :(得分:14)
您可以随时进入内置调试器并从那里运行命令。
perl -d -e 1
答案 8 :(得分:11)
有两种流行的Perl REPL 1. Devel::REPL很棒 但IMO Reply更好。
答案 9 :(得分:10)
我已创建perli
, Perl REPL ,可在 Linux,macOS和Windows 上运行。
它的重点是自动结果打印,方便的文档查找和简单 检查正则表达式匹配 您可以看到屏幕截图here。
独立(没有Perl本身以外的依赖项),但强烈建议安装rlwrap
以支持命令行编辑,持久性命令历史记录和制表符完成 - 阅读更多here。
<强>安装强>
如果您碰巧安装了Node.js:
npm install -g perli
否则:
Unix 类似平台:将this script作为perli
下载到系统路径中的文件夹,并使其{{1}成为可执行文件}。
Windows :将this script作为chmod +x
(请注意perli.pl
扩展名)下载到系统路径中的文件夹中。
如果您不介意以.pl
方式调用Perli,那么您已全部设置完毕。
否则,在具有以下内容的同一文件夹中创建名为perli.pl
的批处理文件:perli.cmd
;这使得调用仅为@%~dpn.pl %*
。
答案 10 :(得分:6)
perl -d
是你的朋友:
% perl -de 0
答案 11 :(得分:6)
来自Devel :: REPL的re.pl
答案 12 :(得分:5)
我一直这样做:
perl -wlne'eval;print$@if$@'
使用5.10,我已切换到:
perl -wnE'say eval()//$@'
答案 13 :(得分:5)
Read-eval-print loop:
$ perl -e'while(<>){print eval,"\n"}'
答案 14 :(得分:4)
Perl没有控制台,但调试器可以用作一个。在命令提示符处,键入perl -de 1
。 (值“1”无关紧要,它只是一个无效的有效语句。)
Perl shell还有几个选项。
有关详细信息,请参阅perlfaq3。
答案 15 :(得分:3)
你可以在这里查看psh:http://gnp.github.io/psh/
它是一个完整的shell(你可以用它代替bash),但是使用perl语法..所以你可以动态创建方法等。
答案 16 :(得分:3)
在Debian / Ubuntu下:
$ sudo apt-get install libdevel-repl-perl
$ re.pl
$ sudo apt-get install libapp-repl-perl
$ iperl
答案 17 :(得分:2)
更新:我之后创建了一个可下载的REPL - 请参阅my other answer。
事后看来:
rlwrap
,它为任何命令提供readline支持,您可以将它与一个简单的Perl命令组合以创建一个可用的REPL ,从而无需第三个 - 派对REPL解决方案。
rlwrap
通过Homebrew安装brew install rlwrap
。rlwrap
;例如,在Ubuntu上,使用sudo apt-get install rlwrap
。rlwrap
和Perl命令的所述组合,请参阅Ján Sáreník's answer。 你得不到什么:
唯一提供这些解决方案的第三方解决方案(包括非平凡的安装+其他非显而易见的步骤)是 psh ,但是:
它在大约2。5年内没有看到活动
它的重点不同之处在于它旨在成为一个成熟的 shell替换,因此就像传统的shell一样工作,这意味着它不会自动将命令评估为 Perl 语句,需要显式输出命令(如print
)才能打印表达式的结果。
Ján Sáreník's answer可以通过以下方式进行改进:
如果您使用Data::Printer
作为一次性操作安装 [sudo] cpan Data::Printer
模块,则可以将其加载到REPL中以使用 {{1函数,您可以将list / arrays / hashtables传递给枚举。
这是一个名为p()
的别名,带有readline和iperl
支持,您可以将其放入类似POSIX的shell的初始化文件中(例如Data::Printer
) :
~/.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
与Ján的回答一样,表达式的标量结果是自动打印; e.g:
$ iperl # start the REPL
iperl> p %ENV # print key-value pairs in hashtable %ENV
答案 18 :(得分:1)
您可以在此处在线(就像生活中的许多事情一样):
答案 19 :(得分:1)
Matt Trout的overview列出了五个选项,从perl -de 0
开始,他推荐Reply
,如果插件的可扩展性很重要,或tinyrepl
来自Eval::WithLexicals
,对于最小的纯perl解决方案,包括readline支持和词汇持久性。
答案 20 :(得分:0)
您可以在org-babel
中使用emacs
;打开一个org-mode
文件,即tmp.org
,然后你可以:
#+begin_src perl :results output
@a = (1,5,9);
print ((join ", ", @a) . "\n");
$b = scalar @a;
print "$#a, $b\n";
print "$#a, " . @a . "\n";
print join ", ", 1..$#a; print "\n";
print join ", ", @a[0..$#a]
#+end_src
按 CTRL-c CTRL-c
评估块:
#+RESULTS:
#+begin_example
1, 5, 9
2, 3
2, 3
1, 2
1, 5, 9
#+end_example
我不确定这需要什么 emacs 配置才能工作,但我认为您只需安装 https://github.com/hlissner/doom-emacs 并启用其 perl
和 org-mode
模块。
答案 21 :(得分:0)
另请参阅Stylish REPL(适用于GNU Emacs)http://blog.jrock.us/articles/Stylish%20REPL.pod
答案 22 :(得分:0)
Sepia和PDE也有自己的REPL(对于GNU Emacs)。
答案 23 :(得分:0)
还要在CPAN上查找ptkdb: http://search.cpan.org/search?query=ptkdb&mode=all