如何启动 Perl 的交互式控制台,类似于 irb Ruby 命令或 python 对于Python?

有帮助吗?

解决方案

您可以在一个简单的程序上使用 perl 调试器,如下所示:

perl -de1

或者有 亚历克西斯·苏克里的 Perl 控制台 应用程序,但我没用过。

其他提示

Matt Trout 不仅写了一篇关于 REPL 的文章,他实际上还写了一篇 - 开发::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

如果您想要历史记录,请使用 回卷. 。这可能是你的 ~/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(读取、评估、打印、循环)接口。有几种方法可以做到这一点:

  • 马特·特劳特有 一篇文章 描述了如何写一个
  • 阿德里亚诺·费雷拉 描述了一些选项
  • 最后,您可以跳上 irc.perl.org 上的 IRC,并在许多流行频道中尝试 eval 机器人之一。他们将评估您传递给他们的 Perl 块。

我使用命令行作为控制台:

$ perl -e 'print "JAPH\n"'

然后我就可以用我的 巴什 历史记录以取回旧命令。然而,这并不能保留状态。

当您想要测试“一件小事”时(例如回答 Perl 问题时),此形式最有用。我经常发现这些命令被逐字地写入 shell 脚本或 makefile 中。

Perl 没有像 Python 那样内置交互式控制台。但是,您可以使用 Perl 调试器来执行调试相关的操作。您可以使用 -d 选项打开它,但您可能想查看“man perldebug”来了解它。

经过一番谷歌搜索后,有一个单独的项目实现了 Perl 控制台,您可以在 http://www.sukria.net/perlconsole.html.

希望这可以帮助!

您始终可以直接进入内置调试器并从那里运行命令。

   perl -d -e 1

有两种流行的 Perl REPL。
1. 开发::REPL 是很棒的。
2.但国际海事组织 回复 更好。

我已经创建了 perli, , A Perl REPL 运行于 Linux、macOS 和 Windows.

它的重点是自动结果打印,方便的文档查找以及轻松检查常规表达匹配项。
你可以看到截图 这里.

有用 独立的 (除了 Perl 本身之外没有任何依赖项),但是 安装 rlwrap 强烈推荐 以支持命令行编辑、持久命令历史记录和制表符完成 - 了解更多 这里.

安装

  • 如果您碰巧安装了 Node.js:

    npm install -g perli
    
  • 否则:

    • Unix类似平台:下载 这个脚本 作为 perli 到系统路径中的文件夹并使其可执行 chmod +x.

    • 视窗:下载 这个脚本 作为 perli.pl (注意 .pl 扩展名)到系统路径中的文件夹。
      如果你不介意将 Perli 称为 perli.pl, ,一切就绪。
      否则,创建一个名为的批处理文件 perli.cmd 在同一文件夹中包含以下内容: @%~dpn.pl %*;这使得调用就像 perli.

perl -d 是你的朋友:

% perl -de 0

来自 Devel::REPL 的 re.pl

我总是这样做:

perl -wlne'eval;print$@if$@'

在 5.10 中,我切换到:

perl -wnE'say eval()//$@'

读取-求值-打印循环:

$ perl -e'while(<>){print eval,"\n"}'

Perl 没有控制台,但可以将调试器用作控制台。在命令提示符处,键入 perl -de 1. 。(值“1”并不重要,它只是一个不执行任何操作的有效语句。)

还有几个选项 Perl shell.

欲了解更多信息,请阅读 perlfaq3.

你可以在这里查看 psh: http://gnp.github.io/psh/

它是一个完整的 shell(例如,您可以使用它来替换 bash),但使用 perl 语法。所以你可以动态创建方法等。

在 Debian/Ubuntu 下:

$ sudo apt-get install libdevel-repl-perl
$ re.pl

$ sudo apt-get install libapp-repl-perl
$ iperl

更新:我已经创建了一个可下载的 REPL - 请参阅 我的另一个答案.

事后看来:

  • 第三方解决方案 现有答案中提到的是 安装起来很麻烦和/或如果没有不平凡、不明显的额外步骤就无法工作 - 一些解决方案似乎至少被放弃了一半。
  • 可用的 REPL 需要 readline 库来提供命令行编辑键盘支持和历史记录支持 - 确保这是许多第三方解决方案的麻烦点。
  • 如果您安装 CLI rlwrap, ,它为任何命令提供 readline 支持,您可以将其与简单的 Perl 命令结合起来创建可用的 REPL, ,因此无需第三方 REPL 解决方案。
    • 在 OSX 上,您可以安装 rlwrap 通过 自制brew install rlwrap.
    • Linux 发行版应该提供 rlwrap 通过各自的包管理器;例如,在 Ubuntu 上,使用 sudo apt-get install rlwrap.
    • 扬·萨雷尼克的回答 对于所述组合 rlwrap 和 Perl 命令。

你没有得到什么 Ján 的回答是:

  • 自动完成
  • 输入多行语句的能力

提供这些功能的唯一第三方解决方案(具有重要的安装+额外的、不明显的步骤)是 普什, , 但:

  • 大约 2.5 年没有出现任何活动

  • 它的重点有所不同,因为它的目标是成为一个成熟的 更换外壳, ,因此工作方式类似于传统 shell,这意味着它不会自动将命令评估为 珀尔 语句,并且需要显式输出命令,例如 print 打印表达式的结果。


扬·萨雷尼克的回答 可以通过一种方式改进:

  • 默认情况下,它 将数组/列表/哈希表打印为 标量, ,即只打印他们的 元素计数, ,而枚举它们的元素会很方便。

如果您安装 Data::Printer 模块与 [sudo] cpan Data::Printer 作为一次性操作,您可以将其加载到 REPL 中以供使用 p() 函数,您可以向其传递列表/数组/哈希表进行枚举。

这是一个 别名名为 iperl 与阅读线和 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

马特·特劳特的 概述 列出了五个选择,从 perl -de 0 从那时起,他建议 Reply, ,如果通过插件的可扩展性很重要,或者 tinyreplEval::WithLexicals, ,一个最小的、纯 Perl 的解决方案,包括 readline 支持和词法持久性。

还要在 CPAN 上查找 ptkdb:http://search.cpan.org/search?query=ptkdb&mode=all

Sepia 和 PDE 也有自己的 REPL(用于 GNU Emacs)。

另请参阅时尚 REPL(适用于 GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top