Perlでのコマンドライン引数取得が変
以下は、かなり特殊なケースなんだけど・・・。
まず、BEGINでshiftすると、なぜかコマンドラインの引数が取得できる。
しかし、そのおかげで、@ARGVはshift後の値になって、shiftした分コマンドライン引数が減るのです。
use strict; use warnings; my @args = @ARGV; print @args, "\n"; BEGIN { my $a = shift; print $a,"\n"; } D:\>hiki.pl aaa bbb ccc aaa bbbccc
ご指摘を受けたので、ネットで調べてみました。
配列の最初の要素を削除し、その値を返します。その際、各要素はひとつずつインデックスの小さい方へずれ、要素数が1減ります。配列に要素がなければ、未定義値を返します。
http://www.rfs.jp/sb/perl/05/shift.html
ARRAYを省略すると、関数の中では@_が対象になります。それ以外の場所では、@ARGVが対象となります。@_は関数への引数をセットした特殊変数、@ARGVはコマンドラインからの引数をセットした特殊変数です。
と言うことでした。