289

irbRuby やpythonPythonのコマンドと同様に、Perl の対話型コンソールを起動するにはどうすればよいですか?

4

24 に答える 24

326

次のように、単純なプログラムで perl デバッガーを使用できます。

perl -de1

別の方法として、 Alexis Sukriehの Perl Consoleアプリケーションがありますが、私は使用していません。

于 2008-09-16T15:38:53.260 に答える
66

Matt Trout は REPL に関する記事を書いただけでなく、実際に REPL を書きました - Devel::REPL

私はそれを少し使用しましたが、かなりうまく機能し、活発に開発されています。

ところで、コンソールから「perl -e」を使用して言及した人を誰かが改造した理由がわかりません。これは実際には REPL ではありませんが、非常に便利で、私は常に使用しています。

于 2008-09-16T16:16:11.047 に答える
40

「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
于 2008-09-16T19:44:29.363 に答える
34

履歴が必要な場合は、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> 
于 2014-04-03T14:07:39.263 に答える
23

perl への REPL (Read、Evaluate、Print、Loop) インターフェイスについて質問していると思います。これを行うにはいくつかの方法があります。

于 2008-09-16T15:57:19.643 に答える
20

コマンドラインをコンソールとして使用します。

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

その後、bash履歴を使用して古いコマンドを取り戻すことができます。ただし、これは状態を保持しません。

この形式は、"ちょっとしたこと" をテストする場合 (Perl の質問に答える場合など) に最も役立ちます。多くの場合、これらのコマンドはそのままシェル スクリプトまたは makefile にスクレイピングされます。

于 2008-09-16T15:42:39.287 に答える
19

Python のように組み込まれている Perl 用の対話型コンソールはありません。ただし、Perl Debugger を使用して、関連するデバッグを行うことができます。-d オプションで有効にしますが、'man perldebug' を参照して詳細を確認することをお勧めします。

少しグーグルした後、Perl コンソールを実装する別のプロジェクトがあり、次の場所にあります。http://www.sukria.net/perlconsole.html .

お役に立てれば!

于 2008-09-16T15:38:36.893 に答える
15

いつでも組み込みのデバッガーにドロップして、そこからコマンドを実行できます。

   perl -d -e 1
于 2008-09-16T15:37:59.890 に答える
15

2 つの一般的な Perl REPL があります。

  1. Devel::REPLは素晴らしいです。
  2. しかし、IMO Replyの方が優れています。
于 2015-02-06T18:49:29.943 に答える
7

Devel::REPL からの re.pl

于 2008-09-17T07:45:32.717 に答える
7

私はいつもしました:

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

5.10 では、次のように切り替えました。

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

(rlwrap はオプションです)

于 2008-09-18T10:48:08.713 に答える
7

perl -dあなたの友達です:

% perl -de 0
于 2008-09-16T15:37:37.677 に答える
6

ここで psh を調べることができます: http://gnp.github.io/psh/

これは完全なシェルです (たとえば、bash の代わりに使用できます) が、perl 構文を使用するため、その場でメソッドを作成できます。

于 2008-09-16T15:44:53.603 に答える
5

Perl にはコンソールがありませんが、デバッガーはコンソールとして使用できます。コマンド プロンプトで、 と入力しますperl -de 1。(値「1」は問題ではありません。何もしない有効なステートメントです。)

Perl シェルにはいくつかのオプションもあります。

詳細についてはperlfaq3を参照してください。

于 2008-09-16T15:46:40.400 に答える
4

Debian/Ubuntu の場合:

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

$ sudo apt-get install libapp-repl-perl
$ iperl
于 2016-03-05T14:56:12.150 に答える
4

更新: ダウンロード可能な REPL を作成しました。他の回答を参照してください。

後知恵の恩恵を受けて:

  • 既存の回答で言及されているサードパーティのソリューションは、インストールが面倒であるか、重要で自明ではない追加の手順がないと機能しないかのいずれかです。一部のソリューションは、少なくとも半分放棄されているようです。
  • 使用可能な REPL には、コマンドライン編集キーボードのサポートと履歴のサポートのための readline ライブラリが必要です。これは、多くのサードパーティ ソリューションにとってトラブル スポットとなります。
  • 任意のコマンドに readline サポートを提供する CLI をインストールするrlwrapと、シンプルな Perl コマンドと組み合わせて使用​​可能な REPL を作成できるため、サードパーティの REPL ソリューションがなくても済みます。
    • OSX では、 Homebrewを使用しrlwrapてインストールできます。brew install rlwrap
    • Linux ディストリビューションはrlwrap、それぞれのパッケージ マネージャーを介して提供する必要があります。たとえば、Ubuntu では、sudo apt-get install rlwrap.
    • 上記のと Perl コマンドの組み合わせについては、Ján Sáreník の回答を参照してください。rlwrap

Jánの答えで得られないこと:

  • オートコンプリート
  • 複数行のステートメントを入力する機能

これらを提供する唯一のサードパーティのソリューション (自明ではないインストール + 追加の非自明な手順) はpshですが、次のとおりです。

  • 約 2.5 年間活動が見られませんでした

  • その焦点は、本格的なシェルの置き換えを目指しているという点で異なり、したがって従来のシェルのように機能します。つまり、コマンドをPerlステートメントとして自動的に評価せず、次のような明示的な出力コマンドを必要とprintします。式の結果を出力します。


JánSáreníkの答えは、1つの方法で改善できます。

  • デフォルトでは、arrays/lists/hashtables をscalarsとして出力します。つまり、それらの要素 countのみを出力しますが、代わりにそれらの要素を列挙すると便利です。

Data::Printer1 回限りの操作でモジュールをインストールする場合は、列挙のためにリスト/配列/ハッシュテーブルを渡すことができる関数[sudo] cpan Data::Printerを使用するために REPL にロードできます。p()

以下は readline とsupportで名付けられたエイリアスiperlData::Printerで、これを POSIX ライクなシェルの初期化ファイル (例: ) に入れることができます~/.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()//$@'\'

たとえば、次のようにして、 hashtable を介してすべての環境変数を出力できます%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
于 2015-07-08T03:55:34.353 に答える
1

Sepia と PDE にも独自の REPL があります (GNU Emacs 用)。

于 2008-09-17T07:47:13.743 に答える
1

スタイリッシュ REPL (GNU Emacs 用) http://blog.jrock.us/articles/Stylish%20REPL.podも参照してください。

于 2008-09-18T05:54:52.897 に答える
1

また、CPAN で ptkdb を探します: http://search.cpan.org/search?query=ptkdb&mode=all

于 2008-09-16T15:53:20.900 に答える