1. ホーム
  2. パール

[解決済み】Perlのバックティック、system、execの違いは何ですか?

2022-04-01 14:01:22

質問

どなたか教えてください。Perlでは、何が違うのでしょうか。

exec "command";

そして

system("command");

そして

print `command`;

シェルコマンドを実行する方法は他にもあるのでしょうか?

どのように解決するのですか?

エグゼクティブ

はコマンドを実行し を返さない . まるで return ステートメントを関数内で使用します。

コマンドが見つからない場合 exec は偽を返します。 もしコマンドが見つかれば、それは決して真を返さないからです。 を返す意味もない。 STDOUT , STDERR またはコマンドの終了ステータスを表示します。 これに関するドキュメントは perlfunc , というのは、関数だからです。

システム

はコマンドを実行し、コマンド終了後、あなたのPerlスクリプトは継続されます。

戻り値は、コマンドの終了状態です。 これに関するドキュメントは perlfunc .

バックトラック

のように system はコマンドを実行し、Perlスクリプトはコマンドの終了後に継続されます。

とは逆に system の場合、戻り値は STDOUT コマンドの qx// はバックティックに相当します。 これに関するドキュメントは perlop とは異なり systemexec は演算子である。


その他の方法

上記で欠けているのは、コマンドを非同期で実行する方法である。 つまり、Perlスクリプトとコマンドは同時に実行されます。 これを実現するには open . を読み取ることができます。 STDOUT / STDERR に書き込みます。 STDIN を指定します。 ただし、プラットフォームに依存します。

また、この作業を簡単にするためのモジュールもいくつかあります。 それは IPC::Open2IPC::Open3IPC::Run と同様に Win32::Process::Create Windowsの場合