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