it-swarm.cn

如何为Perl启动交互式控制台?

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

243
ibz

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

Perl -de1

或者有 Alexis Sukrieh 的Perl控制台 应用程序,但我没有使用它。

274
Daniel Papasian

Matt Trout不仅写了一篇关于REPL的文章,他实际上写了一篇 - Devel :: REPL

我已经使用了一下它运行得相当好,而且它正在积极开发中。

顺便说一句,我不知道为什么有人在控制台上修改了提到使用“Perl -e”的人。这不是真正的REPL,是真的,但它非常有用,而且我一直都在使用它。

59
Dave Rolsky

我写了一个我称之为“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
34
raldi

我想你问的是Perl的REPL(读取,评估,打印,循环)接口。有几种方法可以做到这一点:

  • Matt Trout有 一篇文章 描述了如何写一篇文章
  • Adriano Ferreira 描述了一些选择
  • 最后,您可以在irc.Perl.org上跳过IRC并在许多热门频道中试用其中一个评估机器人。他们将评估您传递给他们的Perl块。
20
amoore

如果你想要历史,请使用 rlwrap 。这可能是你的~/bin/ips例如:

#!/bin/sh
echo 'This is Interactive Perl Shell'
rlwrap -A -pgreen -S"Perl> " Perl -wnE'say eval()//[email protected]'

这就是它的样子:

$ ips
This is Interactive Perl Shell
Perl> 2**128
3.40282366920938e+38
Perl> 
20
Ján Sáreník

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

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

然后我可以使用我的 bash history来取回旧命令。但是,这并不保留状态。

当您想要测试“一件小事”时(例如回答Perl问题时),此表单最有用。通常,我发现这些命令被逐字删除到Shell脚本或makefile中。

19
Jon Ericson

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

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

希望这可以帮助!

15
Frank Wiles

您可以随时进入内置调试器并从那里运行命令。

   Perl -d -e 1
14
Clinton Pierce

有两种流行的Perl REPL。
1。 Devel :: REPL 很棒。
2。但IMO 回复 更好。

11
Eric Johnson

我创建了 perli ,a Perl REPL 运行在 Linux,macOS和Windows

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

它工作 独立 (没有Perl本身以外的依赖),但 强烈建议安装 rlwrap以便支持命令行编辑,持久命令历史和标签完成 - 阅读更多 这里

安装

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

    npm install -g perli
    
  • 除此以外:

    • Unix- like平台:下载 这个脚本 as perli到系统路径中的一个文件夹,并使用chmod +x使其可执行。

    • Windows:将 此脚本 as perli.pl(注意.pl扩展名)下载到系统路径中的文件夹。
      如果你不介意调用Perli作为perli.pl,那么你已经完成了。
      否则,在同一文件夹中创建一个名为perli.cmd的批处理文件,其中包含以下内容:@%~dpn.pl %*;这使得调用只是perli

10
mklement0

Perl -d是你的朋友:

% Perl -de 0
6
Brian Phillips

来自Devel :: REPL的re.pl

6
Johny

读取 - 评估 - 打印循环:

$ Perl -e'while(<>){print eval,"\n"}'
5
KIM Taegyoon

我一直这样做:

Perl -wlne'eval;[email protected][email protected]'

使用5.10,我切换到:

Perl -wnE'say eval()//[email protected]'
5
ysth

Perl没有控制台,但调试器可以用作一个。在命令提示符下,键入Perl -de 1。 (值“1”无关紧要,它只是一个无效的有效语句。)

Perl Shell还有几个选项

有关更多信息,请阅读 perlfaq3

4
Michael Carman

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

它是一个完整的Shell(你可以用它代替bash),但使用Perl语法..所以你可以动态创建方法等。

3
shelfoo

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

事后看来:

  • 第三方解决方案 在现有答案中提到要么 安装麻烦和/或没有非平凡的,非显而易见的额外步骤也不起作用 - 某些解决方案似乎在至少一半被遗弃。
  • 可用的REPL需要readline库来进行命令行编辑键盘支持和历史记录支持 - 确保这是许多第三方解决方案的麻烦点。
  • 如果你安装CLIrlwrap,它为任何命令提供readline支持,你可以将它与一个简单的Perl命令结合起来创建一个可用的REPL ,从而不用第三方REPL解决方案。[。_____。]
    • 在OSX上,您可以通过 Homebrew with brew install rlwrap安装rlwrap
    • Linux发行版应该通过各自的包管理器提供rlwrap;例如,在Ubuntu上,使用Sudo apt-get install rlwrap
    • 请参阅 JánSáreník的回答 表示rlwrap和Perl命令的组合。

你没有得到 与Ján的回答:

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

提供这些的唯一第三方解决方案(具有非平凡的安装+额外的,非显而易见的步骤)是psh,但是:

  • 它在大约2。5年内没有见过活动

  • 它的重点不同,它的目标是成为一个成熟的Shell替换,因此就像传统的Shell一样,这意味着它不会自动将命令评估为Perl statement,并需要一个显式输出命令,如print来打印表达式的结果。


JánSáreník的回答 可以用一种方式改进:

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

如果使用Data::Printer作为一次性操作安装[Sudo] cpan Data::Printermodule,可以将其加载到REPL中以使用p()函数,您可以将列表传递给它/ arrays/hashtables用于枚举。

这是一个 别名为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()//[email protected]'\'

例如,您可以通过哈希表%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
2
mklement0

在Debian/Ubuntu下:

$ Sudo apt-get install libdevel-repl-Perl
$ re.pl

$ Sudo apt-get install libapp-repl-Perl
$ iperl
2
gavenkoa

Matt Trout的 概述 列出了五个选项,从Perl -de 0开始,他推荐 Reply ,如果通过插件的可扩展性很重要,或者tinyrepl来自 Eval::WithLexicals ,用于包含最小的纯Perl解决方案readline支持和词汇持久性。

1
Davor Cubranic

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

0
Johny

另见Stylish REPL(对于GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod

0
Johny
0
runrig