Perlのインタラクティブコンソールを起動するにはどうすればよいですか?


回答:


297

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

perl -de1

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


27
最小限に使用できるものが必要な場合は、rlwrap を追加する$ rlwrap perl -d -e 1ことを検討してください。履歴と一貫したプロンプトが表示されます
albfan

control+ Lこのコマンドインターフェイスでは機能しません。画面を更新するにはどうすればよいですか?
Zen

1
後知恵の利点:JánSáreníkの答えは、ほとんどすぐに使用できる最良のソリューションを提供するようです(をインストールする必要がある場合がありますrlwrap)。を含むすべてのサードパーティREPL /コンソールソリューションは、perlconsoleインストールが面倒であり、多くの場合、より多くの制限があります。
mklement0 2015

3
残念ながら、何らかの理由で変数perl -de1をサポートしていないようmyで、ハッシュも機能しません…
Geremia

1
perlconsoleこれらの問題に悩まされることはありません。
ジェレミア2016

60

Matt TroutがREPLに関する記事を書いただけでなく、実際に1つ書いた-Devel :: REPL

私はそれを少し使用しましたが、それはかなりうまくいき、活発に開発中です。

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


質問が理解できなかったのではないかと思います。少し編集します。;-)
ジョンエリクソン

2015年半ば現在:[sudo] cpan Devel::REPLOSX 10.10(Perl 5.18.2)でもUbuntu 14.04(Perl 5.18.2)でも、単純に実行するだけでは機能しませんでした。モジュールが見つからないというエラーメッセージが表示されます。1つをインストールし、別の不足しているモジュールが報告された後にあきらめました。
mklement0

@ mklement0必須モジュールを自動的にダウンロードしてビルドするためのcpan設定があります。その設定をオンにする必要があるかもしれません。または、zero-config cpanminusアプリケーションの方が適している場合があります。
ヒトデ2016

@Starfish:ありがとう。将来の読者の時間を節約するため(答えが短いように思えるため):この設定をオンにするにはどうすればよいですか?
mklement0 2016

1
ちなみに、マット・トラウト、re.pl著者は、いくつかの選択肢をリストアップ記事を書いた、と彼自身が使用することを提案しているreply代わりにre.plshadow.cat/blog/matt-s-trout/mstpan-17
デニウソンSáマイア

36

私は "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

4
これは1つのライナーでのみ機能しますか、それとも条件付き分岐、ループ、ネストされたステートメントなどの複数行のPerlコードを処理できますか?
David

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> 

4
うまくまとめることに対する称賛-readlineサポートは、履歴だけでなく、コマンドラインの編集にも必要です。複数行のサポートを除いて、これはうまく機能します。代わりのエイリアスバージョンを次に示しますalias iperl='rlwrap -A -S "perl> " perl -wnE '\''say eval()//$@'\'。OSXのユーザーがインストールすることができますrlwrap経由で自作してbrew install rlwrap
mklement0 2015

:ここでは、リストまたは参照に表現評価さ素敵な出力を与えるものですrlwrap -A -pgreen -S'perl> ' perl -MData::Dumper -wnE'say Dumper[eval()]//$@'
michau

21

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

  • マット・トラウトはそれを書く方法を説明する記事を持っています
  • アドリアーノフェレイラはいくつかのオプションを説明しています
  • 最後に、irc.perl.orgのIRCにアクセスして、人気のあるチャネルの多くでevalボットの1つを試すことができます。彼らはあなたが彼らに渡すPerlのチャンクを評価します。

1
Matt Troutの記事は数年前から掲載されていません。web.archive.org
web

1
Matt Troutは、彼が推奨するREPLのはるかに最新のリストを手に入れました:shadow.cat/blog/matt-s-trout/mstpan-17
Davor Cubranic 2016年

20

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

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

次に、bash履歴を使用して古いコマンドを取得できます。ただし、これは状態を保持しません。

このフォームは、「Perlの質問に答えるときのように」「1つの小さなこと」をテストしたい場合に最も役立ちます。多くの場合、これらのコマンドがそのままシェルスクリプトまたはmakefileに取り込まれます。


1
のような一部のシェルではfish、さえ必要ありません\n
トリシス

15

Pythonのように組み込みのPerl用のインタラクティブコンソールはありません。ただし、Perlデバッガーを使用して、関連するデバッグを行うことができます。-dオプションを使用してオンにしますが、「man perldebug」をチェックして詳細を確認することをお勧めします。

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

お役に立てれば!


この回答は承認された回答よりも早く、もう少し詳しい情報を提供していますが、賛成票を受け取っていません。+1
Junuxx 2012年


13

2つの人気のあるPerl REPLがあります。

  1. Devel :: REPLは素晴らしいです。
  2. しかし、IMO 応答の方が優れています。

7
返信を推奨するための+1。Devel :: REPLの作者自身は、IRCで優れたPerl REPL(コンソール)について質問したときに、独自のソリューションよりもReplyを推奨しました。返信には、オブジェクトの使用可能なメソッドと属性を検査するのに非常に便利なオートコンプリートも付属しています。次のコマンドを使用して、Ubuntuに返信をインストールできますsudo apt-get install libreply-perl。次にreply、ターミナルに入力するだけで実行できます。
Apteryx 2015

どのようにamd run Replyをインストールしますか?MetacpanもGithubページも手順を提供していません。
フィリップ

12

Linux、macOS、Windowsで動作perliするPerl REPLを作成しました。

その焦点は、自動結果印刷、便利なドキュメント検索、正規表現の一致の簡単な検査です。こちらから
スクリーンショットをご覧いただけます

それは作品スタンドアローン(Perl自身以外の依存関係はありません)が、のインストールがrlwrap強く推奨されるサポートコマンドライン編集、永続的なコマンド履歴、タブ補完するように-続きを読むここで

取り付け

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

    npm install -g perli
  • さもないと:

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

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


1
のようにREPL perldocから起動できるのがperli好き'someCommand ?'です。しばらく更新されていないようですが、まだperliを維持していますか?
sdkks 2017

1
@sdkks:問題が見つかった場合は、GitHubで報告してください。修正を試みます。perli私の個人的な使用では問題に遭遇しておらず、それを使用している人はほとんどいないため、しばらく更新されていません。
mklement0 2017

7

私はいつもしました:

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

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

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

(rlwrapはオプションです)



6

Devel :: REPLのre.pl



4

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

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

詳細については、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を作成したので、他の回答を参照しください。

後知恵の利点:

  • サードパーティのソリューションは、どちらかである既存の回答の中で言及した非自明な、非自明な追加の手順なしで仕事をインストールおよび/またはない行うには面倒ないくつかの解決策は、少なくとも半放棄したように見えます- 。
  • 使用可能なREPLには、コマンドライン編集のキーボードサポートと履歴サポートのためのreadlineライブラリが必要です。これが多くのサードパーティソリューションの問題点であることを確認してください。
  • rlwrapコマンドにreadlineサポートを提供するCLIをインストールすると、それを単純なPerlコマンドと組み合わせて使用​​可能なREPLを作成できるため、サードパーティのREPLソリューションなしで実行できます。
    • OSX上では、インストールすることができますrlwrap経由で自作してbrew install rlwrap
    • Linuxディストリビューションはrlwrap、それぞれのパッケージマネージャを介して提供する必要があります。たとえば、Ubuntuではを使用しますsudo apt-get install rlwrap
    • とPerlコマンドの組み合わせについては、JanSáreníkの回答を参照してくださいrlwrap

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

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

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

  • 約2。5年で活動が見られない

  • その焦点は、それが本格的になることを目指していることで異なっているシェルの交換、ひいてはそれが自動的にコマンド評価しないことを意味し、伝統的なシェル、のように動作しますPerlの文を、そのように明示的な出力コマンドを必要とprintします式の結果を出力します。


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

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

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

readlineとsupport名前が付けられiperlData::Printerエイリアスは次の~/.bashrcとおりです。これは、POSIXのようなシェルの初期化ファイル(たとえば)に入れることができます。

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の回答と同様に、式のスカラー結果は自動的に出力されます。例えば:

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


0

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



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.