我如何开始对Perl交互式控制台?

问题描述 投票:247回答:22

我如何开始Perl的交互式控制台,类似于Ruby的irb命令或python为Python?

perl console interactive read-eval-print-loop
22个回答
283
投票

您可以使用一个简单的程序Perl调试,就像这样:

perl -de1

另外还有Alexis Sukrieh's Perl Console应用程序,但我没有用它。


11
投票

有两种流行的Perl REPLs。

  1. Devel::REPL是巨大的。
  2. 但IMO Reply更好。

6
投票

perl -d是你的朋友:

% perl -de 0

6
投票

从杰韦利re.pl :: REPL


5
投票

我总是这样:

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

随着5.10,我已经切换到:

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

5
投票

阅读-EVAL-打印循环:

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

4
投票

Perl中没有一个控制台,但调试器可以作为一个。在命令提示,键入perl -de 1。 (值“1”不要紧,这只是什么也不做一个有效的声明。)

还有一对夫妇的Perl shell选项。

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


4
投票

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

它是一个完整的外壳(可以替换的bash例如使用它),但使用perl的语法..这样你就可以动态创建等方法


3
投票

在Debian / Ubuntu的:

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

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

2
投票

更新:因为我已经创建了一个可下载的REPL - 见my other answer

事后的好处:

  • 现有的答案中提到的第三方解决方案要么是繁琐的安装和/或不不不平凡的,非显而易见的其他步骤的工作 - 一些解决方案似乎是至少半抛弃。
  • 可用一个REPL需要进行命令行编辑键盘的支持和历史支持readline库 - 确保这是许多第三方解决方案的故障点。
  • 如果你安装了CLI rlwrap,这对任何命令提供的ReadLine支持,你可以用一个简单的Perl命令创建一个可用的REPL结合起来,从而使离不开第三方REPL解决方案。 在OSX中,您可以通过与rlwrap Homebrew安装brew install rlwrap。 Linux发行版应通过各自的包管理器提供rlwrap;例如,在Ubuntu,使用sudo apt-get install rlwrap。 见Ján Sáreník's answerrlwrap的所述组合和一个Perl命令。

你不扬的回答能得到什么:

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

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

  • 它并没有在约2.5年没见活动
  • 其重点是,它的目标是成为一个完整的外壳更换不同的,因此,就像一个传统的外壳,这意味着它不会自动评估命令作为一个Perl语句,需要一个明确的输出命令,例如print打印一个表达式的结果。

Ján Sáreník's answer可以以某种方式加以改进:

  • 默认情况下,它输出阵列/列表/哈希表作为标量,即,只打印他们的元件数,而这将是方便的枚举它们的元素来代替。

如果安装有Data::Printer作为一次性操作的[sudo] cpan 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

与简的答案,表达的标量结果被自动打印;例如。:

iperl> 22 / 7  # automatically print scalar result of expression: 3.14285714285714

1
投票

马特·特劳特的overview列出了五个选项,从perl -de 0起,他建议Reply,如果通过插件扩展性是非常重要的,还是从tinyrepl Eval::WithLexicals,对于包括readline的支持和词汇持久性最小,纯perl的解决方案。


59
投票

不仅没有马特·特劳特写一个REPL的一篇文章,他居然写了一个 - Devel::REPL

我用它有点和它的作品相当不错,而且它正在积极发展。

顺便说一句,我不知道为什么有人改装成使用下来“的perl -e”从控制台谁提到的人。这是不是一个真正的REPL,真实的,但它是有用的飞驰,我用它所有的时间。


0
投票

也期待在CPAN关系不得不舍弃ptkdb:http://search.cpan.org/search?query=ptkdb&mode=all


0
投票

棕褐色和PDE也有自己的REPLs(GNU Emacs的)。


0
投票

又见时尚REPL(GNU Emacs的)http://blog.jrock.us/articles/Stylish%20REPL.pod


34
投票

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

23
投票

如果你想的历史,使用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> 

20
投票

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

  • 马特·特劳特有an article,描述了如何写一个
  • 阿德里亚诺费雷拉has described some options
  • 最后,你可以在IRC在irc.perl.org跳并尝试EVAL机器人之一,在许多流行的渠道。他们将评估你传递给他们的perl块。

19
投票

我使用命令行控制台:

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

然后,我可以用我的bash历史找回旧命令。这不保留状态,但是。

当你想测试“一个小东西”(Perl的回答提问时等),这种形式是最有用的。通常情况下,我觉得这些命令获取逐字刮入shell脚本或生成文件。


15
投票

没有一个交互式控制台对Perl建于像Python一样。但是,您可以使用Perl调试器来调试做相关的东西。您-d选项打开它,但你可能要检查出“人perldebug更多地了解它。

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

希望这可以帮助!


14
投票

你可以随时拖放到内置的调试和运行命令从那里。

   perl -d -e 1

11
投票

我创建perli,在Linux,MacOS和Windows上运行一个Perl REPL。

其焦点是自动的结果打印,方便文档查找,和正则表达式匹配的容易检查。 你可以看到截图here

它的工作原理单机(有没有比Perl本身以外的依赖),但强烈建议安装rlwrap,以便支持命令行编辑,持久命令历史和Tab键完成 - 阅读更多here

安装

  • 如果你碰巧有安装Node.js的: npm install -g perli
  • 除此以外: 类Unix平台:作为this script下载perli在系统中的路径的文件夹,并使其与chmod +x可执行文件。 Windows系统:下载this scriptperli.pl(注意.pl扩展名)在你的系统的文件夹路径。 如果你不介意调用Perli为perli.pl,你都设置。 否则,创建具有以下内容的文件夹命名perli.cmd一个批处理文件:@%~dpn.pl %*;这使得调用刚才perli

推荐问答