下記のようなコードを見て、なぜ変数に関数を代入?と一瞬思考停止してしまった。
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/usr/bin/env perl use strict; use warnings; my $file = shift; open my $fh, '<', $file or die qq{Can't open file: "$file": $!}; 以下略 |
このプログラムは下記のように引数を指定して実行するもので、
1 2 |
$ perl example.pl arg |
perlではコマンドラインの引数は@ARGVに代入されます。
shift関数は配列の先頭の値を引っぱってくる関数で、コマンドライン引数を取るには以下のようにします。
1 2 |
my $file = shift @ARGV |
しらなかったのですが、shift関数の引数は省略可能な場合がある!
冒頭のコードの例のようにコマンドライン引数を変数に代入する場合はshift関数の引数を諸略できる。