我该如何启动Perl的交互式控制台,类似于Ruby中的irb
命令或Python中的python
命令?
我该如何启动Perl的交互式控制台,类似于Ruby中的irb
命令或Python中的python
命令?
您可以在类似下面这样的简单程序中使用Perl调试器:
perl -de1
这个命令将在表达式1
(-e1
)上启动Perl调试器(-d
), 因为调试器需要一些东西来进行调试(通常是一个包含Perl代码的文件)。
该命令也可以写成 perl -d -e 1
。
另外,还有Alexis Sukrieh的Perl控制台应用程序,但我没有使用过。
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)上都是如此:我遇到了缺少模块的运行时错误;安装了一个模块,然后在报告另一个缺失模块后放弃了。 - mklement0如果您需要历史记录,请使用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>
alias iperl='rlwrap -A -S "perl> " perl -wnE '\''say eval()//$@'\'
。OSX用户可以通过Homebrew安装rlwrap
,使用brew install rlwrap
即可。 - mklement0rlwrap -A -pgreen -S'perl> ' perl -MData::Dumper -wnE'say Dumper[eval()]//$@'
。 - michau我写了一个我称之为“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
我使用命令行作为控制台:
$ perl -e 'print "JAPH\n"'
然后我可以使用我的bash历史记录来获取以前的命令。然而,这不会保留状态。
当您想要测试“一点小东西”(例如回答Perl问题时)时,此表单最有用。通常,我发现这些命令会被逐字地抓取到一个shell脚本或makefile中。
fish
),甚至不需要使用 \n
。 - trysis就像Python一样,Perl中没有内置的交互式控制台。但是,您可以使用Perl调试器来进行调试相关的操作。您可以使用-d选项启动它,但是建议您查看'man perldebug'以了解有关它的信息。
经过一点谷歌搜索,发现有一个单独的项目实现了Perl控制台,您可以在Perl Console - 带有完成的Perl代码交互评估器中找到。
希望这可以帮助您!
有两种流行的Perl REPL。
对于reply
,只需将其作为命令运行。该模块会安装reply
脚本。如果您已经安装了该模块但没有这个命令,请检查您的PATH
变量。
$ reply --help
reply [-lb] [-I dir] [-M mod] [--version] [--help] [--cfg file]
sudo apt-get install libreply-perl
。然后,在终端中只需键入reply
即可运行它。 - Apteryx回复
- Gilles Quénotperli
REPL 中像 'someCommand ?'
一样启动 perldoc
。不过看起来它已经有一段时间没有更新了,你还在维护 perli 吗? - user3905644perli
已经有一段时间没有更新了,因为在我的个人使用中,我还没有遇到任何问题,而且似乎很少有人在使用它,但据我所知,它仍然可以正常工作。 - mklement0你可以随时进入内置调试器并在那里运行命令。
perl -d -e 1
$ rlwrap perl -d -e 1
。这将使您获得历史记录和一致的提示符。 - albfancontrol
+L
无法使用,我该如何刷新屏幕? - Zenperl -de1
看起来不支持my
变量,而且由于某种原因哈希表也不能使用…… - Geremiaperlconsole
不会受到这些问题的困扰。 - Geremiarlwrap
改变了我的生活。 - mondaugen