Perlの勉強過程でのメモです。ウソ書いてる可能性あり(汗


Perlではコマンドライン引数は組み込み変数@ARGVに渡されます。
C言語のように第一引数が実行ファイル名ではありません。

> perl test.pl aaa bbb

$ARGV[0] = "aaa"
$ARGV[1] = "bbb"

コマンドライン引数列挙のコードは、

for ($i = 0; $ARGV[$i]; $i++)
{
  print "$ARGV[$i]\n";
}

どうもC言語っぽいコード、foreach風の?書き方のほうがスマートですね。
'foreach 変数(リスト)'でリストから変数に値を格納しループ実行してくれるようです。
さらに変数を省略すれば自動的にデフォルト変数'$_'が使われます。

foreach (@ARGV)
{
  print "$_\n";
}

便利ですね:-)



さて、上記のコマンドラインの列挙を利用してワイルドカード展開も出来るでしょうか?
プロンプトから実行してみますが、

> perl test.pl *.*
|*.*

そのまま文字"*.*"が出力されてしまいました。だめですね。
Perlでワイルドカード展開をしてもらう場合、組み込み変数@ARGVを<>で囲みます。

foreach (<@ARGV>)
{
  print "$_\n";
}

プロンプトから実行してみると、

> perl test.pl *.*
|test.pl

うまくいきました。