commandperlを使用してコマンド(例)を実行したいと思いsystem()ます。次のようにシェルcommandから実行されるとします。
command --arg1=arg1 --arg2=arg2 -arg3 -arg4
これらの引数を使用system()して実行するにはどうすればよいですか?command
ベストプラクティス:シェルを避け、自動エラー処理を使用します- IPC::System::Simple。
require IPC::System::Simple;
use autodie qw(:all);
system qw(command --arg1=arg1 --arg2=arg2 -arg3 -arg4);
use IPC::System::Simple qw(runx);
runx [0], qw(command --arg1=arg1 --arg2=arg2 -arg3 -arg4);
# ↑ list of allowed EXIT_VALs, see documentation
編集:暴言が続きます。
eugene yの回答には、システムへのドキュメントへのリンクが含まれています。そこでは、適切に実行するために毎回含める必要のある膨大なコードを見ることができsystemます。eugene yの答えは、その一部を示しています。
このような状況になると、繰り返されるコードをモジュールにまとめます。私は、適切な飾り気のない例外処理と類似点を示していますTry::TinyがIPC::System::Simple、正しくsystem行われたように、コミュニティからのこの迅速な採用は見られませんでした。もっと頻繁に繰り返す必要があるようです。
だから、使用してautodieください!使用してくださいIPC::System::Simple!面倒な作業を省き、テスト済みのコードを使用することを確認してください。
my @args = qw(command --arg1=arg1 --arg2=arg2 -arg3 -arg4);
system(@args) == 0 or die "system @args failed: $?";
詳細については、perldocを参照してください。
my @args = ( "command", "--arg1=arg1", "--arg2=arg2", "-arg3", "-arg4" );
system(@args);
Perlのすべてと同様に、それを行う方法は複数あります:)
最良の方法は、引数をリストとして渡すことです。
system("command", "--arg1=arg1","--arg2=arg2","-arg3","-arg4");
ただし、プログラムがそのバージョンでうまく機能しないように見える場合もあります(特に、シェルから呼び出されることを期待している場合)。単一の文字列としてコマンドを実行すると、Perlはシェルからコマンドを呼び出します。
system("command --arg1=arg1 --arg2=arg2 -arg3 -arg4");
しかし、その形式は遅いです。