Perl の対話型コンソールを起動するにはどうすればよいですか?
-
09-06-2019 - |
質問
Perl の対話型コンソールを起動するにはどうすればよいですか。 irb
Rubyのコマンドまたは python
パイソン用?
解決
他のヒント
Matt Trout は REPL に関する記事を書いただけでなく、実際に記事を書きました - 開発::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
履歴が必要な場合は、使用してください rlラップ. 。これはあなたのものかもしれません ~/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 (読み取り、評価、印刷、ループ) インターフェイスについて質問していると思います。これを行うにはいくつかの方法があります。
- マット・トラウトは 記事 書き方を説明したものです
- アドリアーノ・フェレイラ いくつかのオプションについて説明しました
- そして最後に、irc.perl.org で IRC にアクセスし、多くの人気チャンネルで評価ボットの 1 つを試すことができます。彼らは、あなたが彼らに渡す Perl のチャンクを評価します。
コマンドラインをコンソールとして使用します。
$ perl -e 'print "JAPH\n"'
そうすれば、私のものを使うことができます バッシュ 履歴を使用して古いコマンドを取り戻すことができます。ただし、これでは状態は保持されません。
このフォームは、「1 つの小さなこと」をテストしたい場合 (Perl の質問に答える場合など) に最も役立ちます。多くの場合、これらのコマンドがそのままシェル スクリプトまたはメイクファイルに取り込まれていることがわかります。
Python のような Perl 用の対話型コンソールは組み込まれていません。ただし、Perl デバッガを使用してデバッグ関連の作業を行うことはできます。-d オプションを使用してこれをオンにしますが、それについて学ぶために「man perldebug」をチェックすることをお勧めします。
少しグーグルで調べてみると、Perl コンソールを実装する別のプロジェクトがあり、次の場所で見つけることができます。 http://www.sukria.net/perlconsole.html.
お役に立てれば!
いつでも組み込みデバッガーにドロップして、そこからコマンドを実行できます。
perl -d -e 1
私が作成しました perli
, 、 Perl REPL で実行されます Linux、macOS、および Windows.
その焦点は、自動結果印刷、便利なドキュメントの検索、および定期的な発現マッチの簡単な検査です。
スクリーンショットを見ることができます ここ.
それは動作します スタンドアロン (Perl 自体以外に依存関係はありません)、しかし のインストール rlwrap
強くお勧めします コマンドライン編集、永続的なコマンド履歴、タブ補完をサポートするため - 続きを読む ここ.
インストール
Node.js がインストールされている場合:
npm install -g perli
さもないと:
ユニックス- のようなプラットフォーム:ダウンロード このスクリプト として
perli
システムのパス内のフォルダーにコピーし、次のコマンドで実行可能にします。chmod +x
.ウィンドウズ:ダウンロード このスクリプト として
perli.pl
(注意してください.pl
拡張子) をシステムのパス内のフォルダーにコピーします。
Perli を呼び出してもよければ、perli.pl
, これで準備完了です。
それ以外の場合は、という名前のバッチ ファイルを作成します。perli.cmd
同じフォルダー内に次の内容が含まれています。@%~dpn.pl %*
;これにより、次のように呼び出しが可能になりますperli
.
perl -d
あなたの友だちです:
% perl -de 0
Devel::REPL の re.pl
私はいつもこうしていました:
perl -wlne'eval;print$@if$@'
5.10 では、次のように切り替えました。
perl -wnE'say eval()//$@'
読み取り-評価-印刷ループ:
$ perl -e'while(<>){print eval,"\n"}'
ここで 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 ライブラリが必要です - これが多くのサードパーティ ソリューションにとって問題となる場所であることを確認します。
- CLIをインストールする場合
rlwrap
, は、任意のコマンドに readline サポートを提供します。これを単純な Perl コマンドと組み合わせて、使用可能な REPL を作成できます。, したがって、サードパーティの REPL ソリューションなしで対応できます。- OSX では、インストールできます
rlwrap
経由 自作 とbrew install rlwrap
. - Linux ディストリビューションが提供する必要があるのは、
rlwrap
それぞれのパッケージマネージャー経由。たとえば、Ubuntu では次のようにします。sudo apt-get install rlwrap
. - 見る ヤン・サレニクの答え 上記の組み合わせについて
rlwrap
そしてPerlコマンド。
- OSX では、インストールできます
得られないもの ヤンの答えは次のとおりです。
- オートコンプリート
- 複数行のステートメントを入力する機能
これらを提供する唯一のサードパーティ ソリューション (簡単ではないインストールと追加の自明ではない手順を伴う) は次のとおりです。 プシュ, 、 しかし:
約2年半ほど活動がなかった
本格的なものを目指すという点で焦点が異なります。 シェル交換, したがって、従来のシェルのように動作します。つまり、コマンドをシェルとして自動的に評価しません。 パール ステートメントであり、次のような明示的な出力コマンドが必要です。
print
式の結果を出力します。
ヤン・サレニクの答え ある方法で改善できます。
- デフォルトでは、 配列/リスト/ハッシュテーブルを次のように出力します スカラー, つまり、それらの内容のみを出力します 要素数, 代わりに要素を列挙すると便利です。
をインストールすると、 Data::Printer
モジュール付き [sudo] cpan Data::Printer
1 回限りの操作として、これを REPL にロードして使用できます。 p()
この関数には、列挙のためにリスト/配列/ハッシュテーブルを渡すことができます。
ここにあります というエイリアス 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()//$@'\'
たとえば、次のコマンドを実行すると、ハッシュテーブルを介してすべての環境変数を出力できます。 %ENV
:
$ iperl # start the REPL
iperl> p %ENV # print key-value pairs in hashtable %ENV
ヤンの答えと同様に、 スカラー 式の結果は 自動的に 印刷された。例えば。:
iperl> 22 / 7 # automatically print scalar result of expression: 3.14285714285714
マット・トラウトの 概要 からの 5 つの選択肢をリストします。 perl -de 0
そして彼は次のように勧めています Reply
, 、プラグインによる拡張性が重要な場合、または tinyrepl
から Eval::WithLexicals
, 、readline サポートと字句永続性を含む最小限の純粋な Perl ソリューションです。
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