3

commandperlを使用してコマンド(例)を実行したいと思いsystem()ます。次のようにシェルcommandから実行されるとします。

command --arg1=arg1 --arg2=arg2 -arg3 -arg4

これらの引数を使用system()して実行するにはどうすればよいですか?command

4

4 に答える 4

9

ベストプラクティス:シェルを避け、自動エラー処理を使用します- 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::TinyIPC::System::Simple、正しくsystem行われたように、コミュニティからのこの迅速な採用は見られませんでした。もっと頻繁に繰り返す必要があるようです。

だから、使用してautodieください!使用してくださいIPC::System::Simple面倒な作業を省き、テスト済みのコードを使用することを確認してください。

于 2010-08-13T14:55:23.613 に答える
5
my @args = qw(command --arg1=arg1 --arg2=arg2 -arg3 -arg4);
system(@args) == 0 or die "system @args failed: $?";

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

于 2010-08-13T14:44:58.953 に答える
1
my @args = ( "command", "--arg1=arg1", "--arg2=arg2", "-arg3", "-arg4" );
system(@args);
于 2010-08-13T14:50:33.030 に答える
1

Perlのすべてと同様に、それを行う方法は複数あります:)

最良の方法は、引数をリストとして渡すことです。

system("command", "--arg1=arg1","--arg2=arg2","-arg3","-arg4");

ただし、プログラムがそのバージョンでうまく機能しないように見える場合もあります(特に、シェルから呼び出されることを期待している場合)。単一の文字列としてコマンドを実行すると、Perlはシェルからコマンドを呼び出します。

system("command --arg1=arg1 --arg2=arg2 -arg3 -arg4");

しかし、その形式は遅いです。

于 2010-08-13T14:45:13.827 に答える