我怎样才能启动一个Perl的交互式控制台?

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

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

 perl -de1 

另外还有Alexis Sukrieh的Perl控制台应用程序,但我没有使用它。

Matt Trout不仅写了一篇关于REPL的文章,还写了一篇–Devel :: REPL

我已经使用了一些,它运行得很好,正在积极的发展。

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

我写了一个我称之为“psh”的脚本:

 #! /usr/bin/perl while (<>) { chomp; my $result = eval; print "$_ = $result\n"; } 

无论你input什么,它都以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 

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

  • 马特·鳟鱼有一篇文章 ,描述如何写一个
  • 阿德里亚诺·费雷拉描述了一些select
  • 最后,您可以在irc.perl.org上跳到IRC上,并在许多热门频道中试用其中一款eval机器人。 他们会评估你传给他们的perl块。

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

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

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

当你想testing“一件小事”(比如在回答Perl问题的时候),这种forms是最有用的。 通常情况下,我发现这些命令被逐字地写入到shell脚本或makefile中。

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

经过一番search,有一个单独的项目实现了一个Perl控制台,你可以在http://www.sukria.net/perlconsole.htmlfind。;

希望这可以帮助!

你总是可以放入内置的debugging器并从那里运行命令。

  perl -d -e 1 

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

有两种stream行的Perl REPLs。
1. Devel :: REPL很棒。
但是IMO 回复更好。

我创build了perli ,一个运行在Linux,OS X和Windows上的Perl REPL

其重点是自动结果打印,方便的文档查找,以及对正则expression式匹配的简单检查。
你可以在这里看到截图。

独立工作(除Perl本身之外没有任何依赖关系),但强烈build议安装rlwrap以支持命令行编辑,持久性命令历史logging和制表符完成 – 请阅读此处 。

安装

  • 如果你碰巧安装了Node.js / io.js:

     npm install -g perli 
  • 除此以外:

    • 类Unix平台: 将此脚本作为perli下载到系统path中的文件夹,并使用chmod +x使其可执行。

    • Windows: 将此脚本作为perli.pl (注意.pl扩展名)下载到系统path中的文件夹中。
      如果你不介意调用Perli作为perli.pl ,那么你就全部设置好了。
      否则,请在以下内容的同一文件夹中创build一个名为perli.cmd的batch file: @%~dpn.pl %* ; 这使得调用只是perli

来自Devel :: REPL的re.pl

perl -d是你的朋友:

 % perl -de 0 

我一直这样做:

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

随着5.10,我已经转向:

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

Perl没有控制台,但是debugging器可以作为一个使用。 在命令提示符处,键入perl -de 1 。 (值“1”并不重要,只是一个无效的有效陈述。)

Perl shell也有几个选项。

有关更多信息,请阅读perlfaq3 。

Read-eval-print循环:

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

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

这是一个完整的shell(你可以使用它来代替bash),但是使用perl语法..所以你可以在飞行中创build方法等。

更新:我已经创build了可下载的REPL – 请参阅我的其他答案 。

事后看来,

  • 现有答案中提到的第三方解决scheme要么安装麻烦,要么在没有不明显的,不明显的附加步骤的情况下工作 – 某些解决scheme似乎至less被放弃了一半。
  • 可用的REPL需要readline库来进行命令行编辑键盘支持和历史logging支持 – 确保这是许多第三方解决scheme的麻烦点。
  • 如果您安装了CLI rlwrap ,它为任何命令提供了readline支持,您可以将它与一个简单的Perl命令组合起来,以创build一个可用的REPL ,从而避免使用第三方REPL解决scheme。
    • 在OSX上,你可以使用brew install rlwrap通过Homebrew来brew install rlwrap
    • Linux发行版应该通过各自的软件包pipe理器提供rlwrap ; 例如在Ubuntu上,使用sudo apt-get install rlwrap
    • 请参阅JánSáreník对rlwrap和Perl命令组合的回答 。

Ján的回答你没有得到

  • 自动完成
  • 能够input多行报表

唯一提供这些(不平凡的安装+额外的,不明显的步骤)的第三方解决scheme是psh ,但是:

  • 在2.5年左右还没有看到活动

  • 它的重点不同在于它的目标是成为一个完整的shell替代品 ,因此像传统的shell一样工作,这意味着它不会自动将命令评估为Perl语句,并且需要显式的输出命令,如print打印expression式的结果。


JánSáreník的答案可以通过一种方式得到改善:

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

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

下面是一个名为iperl别名, 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; eg: `p %ENV`"; } say eval()//$@'\' 

例如,你可以通过哈希表%ENV来打印所有的环境variables:

 $ iperl # start the REPL iperl> p %ENV # print key-value pairs in hashtable %ENV 

和Ján的回答一样,expression式的标量结果是自动打印的; 例如:

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

在Debian / Ubuntu下:

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

Matt Trout的概述列出了五个选项,从perl -de 0开始,他build议Reply ,如果通过插件的扩展性很重要,或者Eval::WithLexicals ,对于包括readline支持和词汇持久性的最小纯perl解决scheme。

在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