Answers:
马特·特劳特(Matt Trout)不仅写了一篇关于REPL的文章,还写了一篇-Devel :: REPL
我已经使用了一段时间,并且效果很好,并且正在积极开发中。
顺便说一句,我不知道为什么有人从控制台使用“ perl -e”来修饰提到的人。这确实不是REPL,但确实非常有用,我一直都在使用它。
[sudo] cpan Devel::REPL
在OSX 10.10(Perl 5.18.2)或Ubuntu 14.04(Perl 5.18.2)上,简单运行都不适合我:我遇到运行时错误,抱怨缺少模块;安装一个,然后在报告另一个缺少的模块后放弃。
re.pl
作者马特·特劳特(Matt Trout)写了一篇文章,列出了几种替代品,他本人建议使用reply
代替re.pl
:shadow.cat/blog/matt-s-trout/mstpan-17
我写了一个脚本,称为“ 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
如果需要历史记录,请使用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>
rlwrap -A -pgreen -S'perl> ' perl -MData::Dumper -wnE'say Dumper[eval()]//$@'
我认为您是在询问PERL的REPL(读取,评估,打印,循环)接口。有几种方法可以做到这一点:
没有像Python那样内置的Perl交互式控制台。但是,您可以使用Perl调试器进行调试相关的事情。您可以使用-d选项将其打开,但是您可能需要查看'man perldebug'来了解它。
经过一番谷歌搜索后,有一个单独的项目实现了Perl控制台,您可以在以下位置找到 http://www.sukria.net/perlconsole.html。
希望这可以帮助!
有两种流行的Perl REPL。
sudo apt-get install libreply-perl
。然后,只需reply
在终端中键入即可运行它。
我创建perli
了一个可在Linux,macOS和Windows上运行的Perl REPL。
它的重点是自动结果打印,方便的文档查找以及易于检查的正则表达式匹配项。
您可以在此处查看屏幕截图。
它可以独立运行(除了Perl本身没有其他依赖项),但是强烈建议安装,rlwrap
以支持命令行编辑,持久命令历史记录和制表符完成- 在此处了解更多信息。
安装
perldoc
从perli
REPL 启动'someCommand ?'
。似乎它已经有一段时间没有更新了,您仍然保持perli吗?
perli
一段时间没有更新,因为就我个人使用而言,我没有遇到任何问题,并且似乎没有其他人在使用它,但是据我所知,它仍然可以像宣传的那样工作。
来自Devel:.REPL的re.pl
Perl没有控制台,但是调试器可以用作控制台。在命令提示符下,键入perl -de 1
。(值“ 1”无关紧要,它只是不执行任何操作的有效语句。)
Perl shell也有两个选择。
有关更多信息,请阅读perlfaq3。
马特·特劳特(Matt Trout)的概述从perl -de 0
开始列出了五个选择,并且建议Reply
通过插件进行扩展很重要,或者tinyrepl
从推荐Eval::WithLexicals
一个最小的纯perl解决方案,该解决方案包括阅读行支持和词法持久性。
更新:我已经创建了一个可下载的REPL-请参阅我的其他答案。
事后看来:
rlwrap
(该命令行提供了对任何命令的读取行支持),则可以将其与简单的Perl命令结合使用以创建可用的REPL。,从而无需第三方REPL解决方案即可解决问题。
rlwrap
通过Homebrew进行安装brew install rlwrap
。rlwrap
通过各自的软件包管理器提供;例如,在Ubuntu上,使用sudo apt-get install rlwrap
。rlwrap
,以了解Perl命令和Perl命令的组合。Ján的答案不会给您带来什么:
提供这些功能的唯一第三方解决方案(具有非平凡的安装+附加的非显而易见的步骤)是psh,但是:
它已经有2.5年没有活动了
它的关注点有所不同,因为它的目标是成为完整的shell替代者,因此像传统的shell一样工作,这意味着它不会自动将命令评估为Perl语句,而是需要显式的输出命令,例如print
to打印表达式的结果。
JánSáreník的答案可以通过以下一种方法加以改进:
如果一次性安装Data::Printer
模块[sudo] cpan Data::Printer
,则可以将其加载到REPL中以使用该p()
功能,可以将列表/数组/哈希表传递给该函数进行枚举。
这是一个以iperl
readline和Data::Printer
support 命名的别名,您可以将其放入类似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()//$@'\'
例如,您可以执行以下操作以通过hashtable打印所有环境变量%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
棕褐色和PDE也有自己的REPL(对于GNU Emacs)。
另请参见时尚的REPL(适用于GNU Emacs)http://blog.jrock.us/articles/Stylish%20REPL.pod
您可以在这里在线(就像生活中的许多事情一样):
$ rlwrap perl -d -e 1
您将获得历史记录和一致的提示