どのように私は、Perlから外部プロセスに引数を渡すことができますか?
-
21-09-2019 - |
質問
Iは、異なる出力を生成するために異なるパラメータで動作するアプリケーションの実行可能ファイルを有します。私は、スクリプトにローカルになり、スクリプト、他のコマンドラインパラメータからこれにいくつかのパラメータを与えたいです。使用方法:
./dump-output.pl <version> <folder-name> <output-file>
my $version = $ARGV[0];
my $foldername = $ARGV[1];
my $outputfile = $ARGV[2];
my $mkdir_cmd = "mkdir -p ~/$foldername";
# There are 6 types of outputs, which can be created:
# 'a', 'b', 'c', 'd', 'e' or 'f'
my @outputtype = ('a', 'b', 'c', 'd', 'e', 'f');
my $mkdir_out = `$mkdir_cmd`;
for( $itr=0; itr<=5; itr++ ) {
$my_cmd = "./my_app -v $version -t $outputtype[itr] -f $outputfile > ~/$foldername/$outputtype.out"
$my_out = `$my_cmd`;
}
私は上記のコードで、本質的に間違って何かをやっているが、それを把握することができませんでした: - (
解決
# Always include these at the top of your programs.
# It will help you find bugs like the ones you had.
use strict;
use warnings;
# You can get all arguments in one shot.
my ($version, $foldername, $outputfile) = @ARGV;
# A flag so we can test our script. When
# everything looks good, set it to 1.
my $RUN = 0;
my $mkdir_cmd = "mkdir -p ~/$foldername";
my $mkdir_out = run_it($mkdir_cmd);
# Word quoting with qw().
my @outputtype = qw(a b c d e f);
# If you already have a list, just iterate over it --
# no need to manually manage the array subscripts yourself.
for my $type (@outputtype) {
my $my_cmd = "./my_app -v $version -t $type -f $outputfile > ~/$foldername/$type.out";
my $my_out = run_it($my_cmd);
}
# Our function that will either run or simply print
# calls to system commands.
sub run_it {
my $cmd = shift;
if ($RUN){
my $output = `$cmd`;
return $output;
}
else {
print $cmd, "\n";
}
}
他のヒント
forループ$
が欠落しています。
OUTPUTTYPEアレイはインデックスの$itr
を欠落している
以上があるかもしれません - 私がテストしていません。これは明白なものです。
それは多分あなたは変数が「i
」のような裸の単語ことができ、Cのような言語から来ているように見えます。 Perlでの変数は常にスカラため$
で始まる、リストのための@
、ハッシュのため%
ます。
所属していません StackOverflow