回答:
あなたが何をしたいかに依存します。2つの引数を入力ファイルとして使用する場合は、それらを渡してから、を使用<>
してその内容を読み取ることができます。
意味が異なる場合は、GetOpt::Std
およびGetOpt::Long
を使用して簡単に処理できます。GetOpt::Std
は1文字のスイッチのみをサポートし、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
。
Contains the name of the current file when reading from <> .
考えているようにそれらを渡し、スクリプトでは配列から取得します@ARGV
。そのようです:
my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
ここから。
$#ARGV + 1
あなたの代わりに@ARGV
ARGV[0]
か$argv[1]
、特定の引数を探している場合。
foreach my $arg (@ARGV) {
print $arg, "\n";
}
各引数を出力します。
代わりに、よりセクシーな洗練された方法.....
my ($src, $dest) = @ARGV;
「仮定」2つの値が渡されます。追加のコードは、仮定が安全であることを確認できます。
@ARGV
、C / C ++がargv / argcを介してそれらを提供するのと同じように、
引数が読み取られるファイル名である場合は、ダイヤモンド(<>)演算子を使用してその内容を取得します。
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
のの外にいる場合にのみ機能します。内ではsub
、sub
プログラムに渡された引数ではなく、に渡された引数のリストを取得します。)
my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}
一部の値だけが必要な場合は、@ ARGV配列を使用できます。ただし、コマンドラインオプションの処理を行うために、より強力なものを探している場合は、Getopt :: Longを使用する必要があります。
./script.pl
か、それとも実行時に完全に何も起こらないでしょう。