irb
Ruby やpython
Pythonのコマンドと同様に、Perl の対話型コンソールを起動するにはどうすればよいですか?
24 に答える
次のように、単純なプログラムで perl デバッガーを使用できます。
perl -de1
別の方法として、 Alexis Sukriehの Perl Consoleアプリケーションがありますが、私は使用していません。
Matt Trout は REPL に関する記事を書いただけでなく、実際に REPL を書きました - Devel::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
履歴が必要な場合は、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>
perl への REPL (Read、Evaluate、Print、Loop) インターフェイスについて質問していると思います。これを行うにはいくつかの方法があります。
- マット・トラウトには、その書き方を説明する記事があります
- Adriano Ferreiraは、いくつかのオプションについて説明しています
- 最後に、irc.perl.org の IRC にアクセスして、多くの人気チャンネルで評価ボットの 1 つを試すことができます。彼らは、あなたが渡した perl のチャンクを評価します。
コマンドラインをコンソールとして使用します。
$ perl -e 'print "JAPH\n"'
その後、bash履歴を使用して古いコマンドを取り戻すことができます。ただし、これは状態を保持しません。
この形式は、"ちょっとしたこと" をテストする場合 (Perl の質問に答える場合など) に最も役立ちます。多くの場合、これらのコマンドはそのままシェル スクリプトまたは makefile にスクレイピングされます。
Python のように組み込まれている Perl 用の対話型コンソールはありません。ただし、Perl Debugger を使用して、関連するデバッグを行うことができます。-d オプションで有効にしますが、'man perldebug' を参照して詳細を確認することをお勧めします。
少しグーグルした後、Perl コンソールを実装する別のプロジェクトがあり、次の場所にあります。http://www.sukria.net/perlconsole.html .
お役に立てれば!
いつでも組み込みのデバッガーにドロップして、そこからコマンドを実行できます。
perl -d -e 1
2 つの一般的な Perl REPL があります。
- Devel::REPLは素晴らしいです。
- しかし、IMO Replyの方が優れています。
Devel::REPL からの re.pl
私はいつもしました:
rlwrap perl -wlne'eval;print$@if$@'
5.10 では、次のように切り替えました。
rlwrap perl -wnE'say eval()//$@'
(rlwrap はオプションです)
perl -d
あなたの友達です:
% perl -de 0
ここで psh を調べることができます: http://gnp.github.io/psh/
これは完全なシェルです (たとえば、bash の代わりに使用できます) が、perl 構文を使用するため、その場でメソッドを作成できます。
Debian/Ubuntu の場合:
$ sudo apt-get install libdevel-repl-perl
$ re.pl
$ sudo apt-get install libapp-repl-perl
$ iperl
更新: ダウンロード可能な 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
- OSX では、 Homebrewを使用し
Jánの答えで得られないこと:
- オートコンプリート
- 複数行のステートメントを入力する機能
これらを提供する唯一のサードパーティのソリューション (自明ではないインストール + 追加の非自明な手順) はpshですが、次のとおりです。
約 2.5 年間活動が見られませんでした
その焦点は、本格的なシェルの置き換えを目指しているという点で異なり、したがって従来のシェルのように機能します。つまり、コマンドをPerlステートメントとして自動的に評価せず、次のような明示的な出力コマンドを必要と
print
します。式の結果を出力します。
JánSáreníkの答えは、1つの方法で改善できます。
- デフォルトでは、arrays/lists/hashtables をscalarsとして出力します。つまり、それらの要素 countのみを出力しますが、代わりにそれらの要素を列挙すると便利です。
Data::Printer
1 回限りの操作でモジュールをインストールする場合は、列挙のためにリスト/配列/ハッシュテーブルを渡すことができる関数[sudo] cpan Data::Printer
を使用するために REPL にロードできます。p()
以下は readline とsupportで名付けられたエイリアスiperl
Data::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
Sepia と PDE にも独自の REPL があります (GNU Emacs 用)。
スタイリッシュ REPL (GNU Emacs 用) http://blog.jrock.us/articles/Stylish%20REPL.podも参照してください。
また、CPAN で ptkdb を探します: http://search.cpan.org/search?query=ptkdb&mode=all