サブルーチンの呼び出しがリストコンテキストかどうかを取得する
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
メソッドの中では特定できません。