web-dev-qa-db-ja.com

Perl用の対話型コンソールを起動するにはどうすればよいですか?

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

249
ibz

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

Perl -de1

あるいは、 Alexis SukriehのPerlコンソール アプリケーションがありますが、使用していません。

280
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

履歴が必要な場合は、 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> 
23
Ján Sáreník

PerlへのREPL(読み取り、評価、印刷、ループ)インターフェースについて質問していると思います。これを行うにはいくつかの方法があります。

  • Matt Troutには 記事 の書き方が記載されています
  • Adriano Ferreira いくつかのオプションが説明されています
  • そして最後に、irc.Perl.orgのIRCに飛び乗って、多くの人気チャンネルでevalボットの1つを試すことができます。渡されたPerlのチャンクを評価します。
20
amoore

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

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

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

このフォームは、「Perlの質問に答えるときのように」「ちょっとしたこと」をテストするときに最も役立ちます。多くの場合、これらのコマンドは逐語的にシェルスクリプトまたはメイクファイルに組み込まれます。

19
Jon Ericson

Pythonのような組み込みのPerl用の対話型コンソールはありません。ただし、Perlデバッガーを使用して、関連するデバッグを行うことはできます。 -dオプションを使用してオンにしますが、「man perldebug」を調べて確認することをお勧めします。

少しググリングした後、 http://www.sukria.net/perlconsole.html で見つけることができるPerlコンソールを実装する別のプロジェクトがあります。

お役に立てれば!

15
Frank Wiles

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

   Perl -d -e 1
14
Clinton Pierce

perliPerl REPLを作成しましたLinux、macOS、およびWindows

その焦点は、自動結果印刷、便利なドキュメント検索、および正規表現一致の簡単な検査です。
スクリーンショットを見ることができます こちら

動作しますstandalone(Perl自体以外の依存関係はありません)が、 rlwrapのインストールは を強くお勧めします。コマンドライン編集、永続的なコマンド履歴、タブ補完をサポートします-詳細は こちら をご覧ください。

インストール

  • Node.jsがインストールされている場合:

    npm install -g perli
    
  • そうでなければ:

    • Unix-likeプラットフォーム: このスクリプトperliとしてシステムパスのフォルダーにダウンロードし、chmod +xで実行可能にします。

    • Windowsこのスクリプトperli.pl(拡張子.plに注意)としてシステムのパスにあるフォルダーにダウンロードします。
      Perliをperli.plとして呼び出すことを気にしないのであれば、準備は完了です。
      それ以外の場合は、同じフォルダーにperli.cmdという名前のバッチファイルを作成し、次のコンテンツを追加します:@%~dpn.pl %*;これにより、perliとしての呼び出しが可能になります。

11
mklement0

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

  1. Devel :: REPL はすばらしい。
  2. しかし、IMO Reply の方が優れています。
11
Eric Johnson

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;print$@if$@'

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

Perl -wnE'say eval()//$@'
5
ysth

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

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

4
shelfoo

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

Perl Shell のオプションもいくつかあります。

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

4
Michael Carman

Debian/Ubuntuの場合:

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

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

更新:ダウンロード可能なREPLを作成しました- my other answer を参照してください。

後知恵の利点:

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

得られないものJánの答え:

  • 自動補完
  • 複数行のステートメントを入力する機能

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

  • それは約2。5年で活動を見ていません

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


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

  • デフォルトでは、は配列/リスト/ハッシュテーブルをscalarsとして印刷します。つまり、要素数のみを印刷します 、代わりに要素を列挙する方が便利です。

Data::Printerモジュールを[Sudo] cpan Data::Printerとともにワンタイム操作としてインストールする場合、リストを渡すことができるp()関数を使用するためにREPLにロードできます列挙用の/ arrays/hashtables。

ReadlineおよびData::Printerをサポートするiperlという名前のエイリアスは次のとおりです。これは、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()//$@'\'

たとえば、次のようにして、ハッシュテーブル%ENVを介してすべての環境変数を出力できます。

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

Jánの答えと同様に、式のscalar結果はautomatically印刷されます。例えば。:

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

セピアとPDEも独自のREPLを持っています(GNU Emacs用)。

0
Johny

Stylish REPL(for GNU Emacs)も参照してください http://blog.jrock.us/articles/Stylish%20REPL.pod

0
Johny
0
runrig