小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

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減ります。配列に要素がなければ、未定義値を返します。
ARRAYを省略すると、関数の中では@_が対象になります。それ以外の場所では、@ARGVが対象となります。@_は関数への引数をセットした特殊変数、@ARGVはコマンドラインからの引数をセットした特殊変数です。

http://www.rfs.jp/sb/perl/05/shift.html

と言うことでした。