Webtech Walker

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";
}

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

このエントリーをはてなブックマークに追加