ibz*_*ibz 255 console perl interactive read-eval-print-loop
如何为Perl启动交互式控制台,类似于irbRuby或pythonPython 的命令?
Dan*_*ian 288
您可以在一个简单的程序上使用perl调试器,如下所示:
perl -de1
Run Code Online (Sandbox Code Playgroud)
另外还有Alexis Sukrieh的Perl控制台应用程序,但我还没有使用它.
Dav*_*sky 59
Matt Trout不仅写了一篇关于REPL的文章,他还写了一篇--Devel :: REPL
我已经使用了一下它运行得相当好,而且它正在积极开发中.
顺便说一句,我不知道为什么有人对控制台上使用"perl -e"提到的人进行了修改.这不是真正的REPL,是真的,但它非常有用,而且我一直都在使用它.
ral*_*ldi 35
我写了一个我称之为"psh"的脚本:
#! /usr/bin/perl
while (<>) {
chomp;
my $result = eval;
print "$_ = $result\n";
}
Run Code Online (Sandbox Code Playgroud)
无论你输入什么内容,它都会在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
Run Code Online (Sandbox Code Playgroud)
Ján*_*ník 23
如果您需要历史记录,请使用rlwrap.这可能是你~/bin/ips的例子:
#!/bin/sh
echo 'This is Interactive Perl shell'
rlwrap -A -pgreen -S"perl> " perl -wnE'say eval()//$@'
Run Code Online (Sandbox Code Playgroud)
这就是它的样子:
$ ips
This is Interactive Perl shell
perl> 2**128
3.40282366920938e+38
perl>
Run Code Online (Sandbox Code Playgroud)
Jon*_*son 19
我使用命令行作为控制台:
$ perl -e 'print "JAPH\n"'
Run Code Online (Sandbox Code Playgroud)
然后我可以使用我的bash历史来恢复旧命令.但是,这并不保留状态.
当您想要测试"一件小事"时(例如回答Perl问题时),此表单最有用.通常,我发现这些命令被逐字删除到shell脚本或makefile中.
Fra*_*les 15
没有像Python那样内置Perl的交互式控制台.但是,您可以使用Perl调试器来调试相关的事情.你用-d选项打开它,但你可能想看看'man perldebug'来了解它.
经过一些谷歌搜索,有一个单独的项目,实现了你可以找到的Perl控制台 http://www.sukria.net/perlconsole.html.
希望这可以帮助!
mkl*_*nt0 12
我创建perli了一个在Linux,macOS和Windows上运行的Perl REPL.
它的重点是自动结果打印,方便的文档查找以及对常规表达式匹配的轻松检查.
你可以在这里看到截图.
它独立工作(没有Perl本身以外的依赖项),但强烈建议安装rlwrap以支持命令行编辑,持久命令历史记录和制表符完成 - 请在此处阅读更多内容.
安装
如果您碰巧安装了Node.js:
npm install -g perli
Run Code Online (Sandbox Code Playgroud)除此以外:
我一直这样做:
rlwrap perl -wlne'eval;print$@if$@'
Run Code Online (Sandbox Code Playgroud)
使用5.10,我切换到:
rlwrap perl -wnE'say eval()//$@'
Run Code Online (Sandbox Code Playgroud)
Perl 没有控制台,但调试器可以用作其中之一。在命令提示符下,键入perl -de 1。(值“1”无关紧要,它只是一个什么都不做的有效语句。)
Perl shell也有几个选项。
有关更多信息,请阅读perlfaq3。
更新:我已经创建了一个可下载的 REPL - 请参阅我的其他答案。
\n\n事后看来:
\n\nrlwrap,它为任何命令提供 readline 支持,则可以将其与简单的 Perl 命令结合起来创建可用的 REPL,从而无需第三方 REPL 解决方案。\n\nrlwrap通过Homebrew进行安装brew install rlwrap。rlwrap通过各自的包管理器提供;例如,在 Ubuntu 上,使用sudo apt-get install rlwrap.rlwrap了解Perl 命令的所述组合。J\xc3\xa1n\ 的答案没有得到什么:
\n\n提供这些功能的唯一第三方解决方案(具有重要的安装+额外的非显而易见的步骤)是psh,但是:
\n\n大约 2.5 年没有出现任何活动
它的重点有所不同,因为它的目标是成为一个成熟的shell 替代品,因此工作方式与传统 shell 类似,这意味着它不会自动将命令评估为Perl语句,并且需要显式输出命令,例如print打印表达式的结果。
J\xc3\xa1n S\xc3\xa1ren\xc3\xadk\ 的答案可以通过一种方式改进:
\n\n如果您以一次性操作的方式安装该Data::Printer模块,则可以将其加载到 REPL 中以使用该函数,您可以向该函数传递列表/数组/哈希表以进行枚举。[sudo] cpan Data::Printerp()
这是一个用 readline 和support命名的别名iperlData::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()//$@\'\\\'\nRun Code Online (Sandbox Code Playgroud)\n\n例如,您可以执行以下操作以通过 hashtable 打印所有环境变量%ENV:
$ iperl # start the REPL\niperl> p %ENV # print key-value pairs in hashtable %ENV\nRun Code Online (Sandbox Code Playgroud)\n\n与 J\xc3\xa1n\ 的答案一样,表达式的标量结果会自动打印;例如:
\n\niperl> 22 / 7 # automatically print scalar result of expression: 3.14285714285714\nRun Code Online (Sandbox Code Playgroud)\n
Matt Trout 的概述列出了五个选择,从perl -de 0开始,Reply如果通过插件的可扩展性很重要,他建议从 开始,或者tinyrepl从 开始Eval::WithLexicals,选择一个最小的、纯 Perl 解决方案,包括 readline 支持和词法持久性。
如果您使用 GNU Guix 包管理器,您可以使用以下命令进入 tinyrepl 的工作环境:
$ guix shell perl perl-eval-withlexicals perl-term-readline-gnu
[env]$ tinyrepl
re.pl$ 'hello world!'
"hello world!"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
119158 次 |
| 最近记录: |