コマンドライン引数の扱い @ARGV
Perlでコマンドライン引数を処理する方法を解説します。
コマンドライン引数とは、プログラムを実行するときに、プログラム名に加えて空白区切りで指定できる引数のことです。
たとえば「test.pl」を実行するときに「1」「3」「5」という値を指定したい場合は、次のようにプログラムを呼び出すことができます。
perl test.pl 1 3 5
上記の例は数字ですがファイル名などの文字列でも大丈夫です。
perl test.pl a.txt b.txt
コマンドライン引数内で空白を使いたい場合
コマンドライン引数の区切りは空白です。空白を使いたい場合は、クォートを使って、エスケープをする必要があります。
perl test.pl foo "bar baz"
コマンドライン引数の受け取り方
コマンドライン引数は@ARGVという特殊変数に代入されています。この特殊変数は、通常の配列と同じように利用することができます。
たとえば、複数の数値がコマンドライン引数として指定された場合は、名前のつけた配列に代入してあげましょう。
my @nums = @ARGV;
リスト代入を使って、コマンドライン引数を受け取ることもできます。
my ($name, $age) = @ARGV;
引数を指定しないshift関数を使って@ARGVの先頭の引数を受け取ることができます。
# @ARGVの先頭の値を取得 my $file = shift;
いずれの場合も、「@ARGV」はそのまま使うのではなく、名前のついた変数に格納して使うようにしましょう。
コマンドライン引数の個数を知りたい場合は@ARGVは通常の変数ですので、スカラコンテキストで評価すると取得することができます。
# コマンドライン引数の個数 my $count = @ARGV;
サブルーチンにおける引数は@_という特殊変数に代入されていました。コマンドライン引数は@ARGVなので、しっかり区別して覚えておきましょう。
コマンドライン引数の「オプション」を処理する
通常のコマンドライン引数に加えて、「オプション」形式のコマンドライン引数を処理したい場合は、Getopt::Longというモジュールを使うのが簡単です。