呼び出しもとのコンテキストで戻り値を変える

back
組み込み関数の多くには、スカラーコンテキストとリストコンテキストで戻り値が代わるが、

(例) localtime
リストコンテキストでは、(秒,分,時,日,月,年...) というリストを返し、
スカラーコンテキストでは、"Mon Nov  1 04:22:15 2004" という文字列を返す。


自作のサブルーチンでも同じような事をさせるには、wantarray を使う。

sub func {
  if (wantarray) {
    # リストコンテキストの場合
    print "list\n";
    return @list;
  }
  elsif (defined wantarray) {
    # スカラーコンテキストの場合
    print "scalar\n";
    return $scalar;
  }
  else {
    # void コンテキストの場合(戻り値を返すことを期待されていない場合)
    print "void\n";
    return;
  }
}

&func;          # void コンテキスト
$val = &func;   # スカラーコンテキスト
@array = &func; # リストコンテキスト

back