1. Home
  2. Archive
  3. sub { my $arg = shift; } のshift

sub { my $arg = shift; } のshift

songmuさんのエントリー見て僕がperlを始めた頃、以下のコードでなんで引数をとれるか超絶意味不明だったのを思い出した。

sub foo {
    my $arg = shift;
    print "Hello $arg";
}

foo('hokaccha'); #=> Hello hokaccha

shiftというのは配列の最初の要素を一個だけとりだして元の配列をひとつシフトさせるperlの組み込み関数です。perlで引数は@_という配列に格納されていて、shift関数の引数を省略すると@_が引数として処理されるので上記のように書けるわけです。つまり上記の例と以下は等価になります。

sub foo {
    my $arg = shift(@_);
    print "Hello $arg";
}

もともとPHPだったのでまず引数を配列で受け取るというのがわからなかったし、関数の引数とか()を省略できるというのも知らなかったので本当に意味不明だったなあ。

コメントフォーム

スパムがひどいので一時的にコメントフォーム閉じます。ゴメンナサイ。