私はPerlスクリプトに取り組んでいます。コマンドラインパラメータをどのように渡すことができますか?
例:
script.pl "string1" "string2"
何をしたいかによって異なります。 2つの引数を入力ファイルとして使用する場合は、それらを渡してから<>
を使用してその内容を読み取ることができます。
意味が異なる場合は、GetOpt::Std
とGetOpt::Long
を使用して簡単に処理できます。 GetOpt::Std
は単一文字のスイッチのみをサポートし、GetOpt::Long
ははるかに柔軟です。 GetOpt::Long
から:
use Getopt::Long;
my $data = "file.dat";
my $length = 24;
my $verbose;
$result = GetOptions ("length=i" => \$length, # numeric
"file=s" => \$data, # string
"verbose" => \$verbose); # flag
または、@ARGV
は、すべてのコマンドライン引数を含む特別な変数です。 $ARGV[0]
は最初の(つまり、"string1"
)であり、$ARGV[1]
は2番目の引数です。 @ARGV
にアクセスするために特別なモジュールは必要ありません。
あなたが考えているようにそれらを渡し、あなたのスクリプトで、それらを配列@ARGV
から取得します。そのようです:
my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
ここ から。
foreach my $arg (@ARGV) {
print $arg, "\n";
}
各引数を出力します。
または、よりセクシーなパーリッシュな方法.....
my ($src, $dest) = @ARGV;
2つの値が「想定」されます。余分なコードにより、仮定が安全であることを確認できます。
さらに別のオプションは、Perl -sを使用することです。例えば:
#!/usr/bin/Perl -s
print "value of -x: $x\n";
print "value of -name: $name\n";
次に、このように呼び出します:
% ./myprog -x -name=Jeff
value of -x: 1
value of -name: Jeff
または、詳細については 元の記事 を参照してください。
引数が読み取り元のファイル名の場合、ダイアモンド(<>)演算子を使用してその内容を取得します。
while (my $line = <>) {
process_line($line);
}
引数がオプション/スイッチの場合、slavy13.myopenid.comで既に示されているように、GetOpt :: StdまたはGetOpt :: Longを使用します。
それらが別のものであるという偶然の機会に、明示的に@ARGVを歩くか、shift
コマンドを使用してアクセスできます。
while (my $arg = shift) {
print "Found argument $arg\n";
}
(shift
を使用してこれを行うと、すべてのsub
sの外にいる場合にのみ機能します。sub
内では、プログラムに渡される引数ではなく、sub
に渡される引数のリストを取得します。)
my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}
値が必要な場合は、@ ARGV配列を使用できます。ただし、いくつかのコマンドラインオプション処理を行うために、より強力なものを探している場合は、 Getopt :: Long を使用する必要があります。