wantarray

サブルーチンの呼び出しがリストコンテキストかどうかを取得する

構文

解説

wantarray は、実行中のサブルーチンまたは eval のコンテキストがリストで値を求めているなら真を返します。 コンテキストがスカラーで値を求めているなら偽を返します。 コンテキストが値を求めていないなら未定義値を返します(ボイドコンテキスト)。

sub my_func {
    my @ary = ( 'one', 'two', 'three' );
    if (wantarray) {
        # リストコンテキストなら配列をそのまま返す
        return @ary;
    }
    else {
        # スカラーコンテキストなら配列の要素をスペースで連結した文字列を返す
        return join( ' ', @ary );
    }
}

my @ary = &my_func();    # ('one', 'two', 'three')
my $val = &my_func();    # "one two three"

なお、wantarray の結果は、ファイルの先頭、BEGIN, UNITCHECK, CHECK, INIT, END といったブロック、 DESTROY メソッドの中では特定できません。