如何启动Perl的交互式控制台,类似于Ruby的irb命令或python的python命令?
Perl不像Python那样内置交互式控制台。但是,您可以使用Perl调试器来做调试相关的事情。您可以使用-d选项打开它,但您可能想要查看'man perldebug'以了解它。
在谷歌搜索一下之后,有一个单独的项目实现了Perl控制台,您可以在 Perl控制台- Perl代码与完成的交互式计算器。
希望这能有所帮助!
我使用命令行作为控制台:
$ perl -e 'print "JAPH\n"'
然后,我可以使用bash历史记录获取旧命令。然而,这并不能保存状态。
当您想测试“一件小事”(比如回答Perl问题)时,这个表单最有用。我经常发现这些命令被逐字逐句地复制到shell脚本或makefile中。
你可以在这里查看psh: http://gnp.github.io/psh/
这是一个完整的shell(你可以用它来代替bash),但使用perl语法。你可以动态地创建方法。
Perl没有控制台,但是调试器可以作为控制台使用。在命令提示符下,键入perl -de 1。(值“1”无关紧要,它只是一个没有任何作用的有效语句。)
Perl shell也有几个选项: 存档的“perlfaq3”页面,其中包含问题“有Perl Shell吗?”
有关更多信息,请阅读perlfaq3(当前版本)。
我想你是在问perl的REPL(读取,计算,打印,循环)接口。有几种方法可以做到这一点:
马特·特劳特(Matt Trout)有一篇文章描述了如何写一个 阿德里亚诺·费雷拉描述了一些选择 最后,你可以在irc.perl.org上登陆IRC,并在许多流行的频道中尝试其中一个评估机器人。他们会计算你传递给他们的perl代码块。
Matt Trout不仅写了一篇关于REPL的文章,他实际上也写了一篇——Devel::REPL
我曾经使用过它,它工作得相当好,并且正在积极开发中。
顺便说一句,我不知道为什么有人贬低了那个提到从控制台使用“perl -e”的人。这不是一个真正的REPL,但它非常有用,我一直在使用它。
我写了一个脚本,我称之为“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 perl -wlne'eval;print$@if$@'
使用5.10,我已经切换到:
rlwrap perl -wnE'say eval()//$@'
(rlwrap是可选的)
如果需要历史记录,请使用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>
有两种流行的Perl repl。
Devel: REPL很棒。 但在我看来,回复更好。
对于回复,只需运行它作为一个命令。模块安装应答脚本。如果您已经安装了模块,但没有该命令,请检查PATH变量。
$ reply --help
reply [-lb] [-I dir] [-M mod] [--version] [--help] [--cfg file]
更新:我已经创建了一个可下载的REPL -见我的另一个答案。
事后看来:
The third-party solutions mentioned among the existing answers are either cumbersome to install and/or do not work without non-trivial, non-obvious additional steps - some solutions appear to be at least half-abandoned. A usable REPL needs the readline library for command-line-editing keyboard support and history support - ensuring this is a trouble spot for many third-party solutions. If you install CLI rlwrap, which provides readline support to any command, you can combine it with a simple Perl command to create a usable REPL, and thus make do without third-party REPL solutions. On OSX, you can install rlwrap via Homebrew with brew install rlwrap. Linux distros should offer rlwrap via their respective package managers; e.g., on Ubuntu, use sudo apt-get install rlwrap. See Ján Sáreník's answer for said combination of rlwrap and a Perl command.
你不明白Ján的答案:
自动完成 能够输入多行语句
唯一的第三方解决方案提供这些(不简单的安装+额外的,不明显的步骤)是psh,但是:
它已经有大约两年半没有活动了 它的重点是不同的,它的目标是成为一个成熟的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
我已经创建了perli,一个运行在Linux、macOS和Windows上的Perl REPL。
它的重点是自动打印结果,方便的文档查找,并且简单 检查正则表达式匹配。 你可以在这里看到截图。
它可以独立工作(除了Perl本身,没有其他依赖项),但是强烈建议安装rlwrap,以便支持命令行编辑、持久的命令历史记录和制表符补全——在这里阅读更多信息。
安装
If you happen to have Node.js installed: npm install -g perli Otherwise: Unix-like platforms: Download this script as perli to a folder in your system's path and make it executable with chmod +x. Windows: Download the this script as perli.pl (note the .pl extension) to a folder in your system's path. If you don't mind invoking Perli as perli.pl, you're all set. Otherwise, create a batch file named perli.cmd in the same folder with the following content: @%~dpn.pl %*; this enables invocation as just perli.
在 Debian/Ubuntu 下:
$ sudo apt-get install libdevel-repl-perl
$ re.pl
$ sudo apt-get install libapp-repl-perl
$ iperl
Matt Trout的概述列出了五个选择,从perl -de 0开始,如果通过插件扩展是重要的,他推荐Reply,或者Eval::WithLexicals的tinyrepl,这是一个最小的、纯perl的解决方案,包括readline支持和词汇持久性。
你可以在网上做这件事(就像生活中的许多事情一样):
https://www.tutorialspoint.com/execute_perl_online.php
你可以在emacs中使用org-babel;打开一个组织模式文件,即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模块。
推荐文章
- 显示/隐藏c#控制台应用程序的控制台窗口
- 我如何使用布尔变量在Perl?
- 打印对象的所有属性
- 在PowerShell中重新加载路径
- IE8的console.log怎么了?
- 如何将文件加载到python控制台?
- Perl的反撇号、system和exec之间有什么区别?
- Go提供REPL吗?
- 如何包括JavaScript文件或库在Chrome控制台?
- 我如何捕获Ctrl+C (SIGINT)在c#控制台应用程序?
- 在Perl中查找数组的大小
- 如何检查Perl数组是否包含特定的值?
- 非常简单的log4j2 XML配置文件,使用控制台和文件追加器
- Perl、Python、AWK和sed之间有什么区别?
- 如何从iOS模拟器获取控制台日志?