wantarray関数を使ってみる

昨日の三項演算子のスマートな書き方 - ABラボラトリのコメント欄でid:kidd-number5さんに教えて頂いた、wantarray関数を用いた三項演算子の慣用表現。

とりあえず使ってみようということで、単純なサンプルプログラムを書いてみました。

my @hoge = &hantei(<STDIN>);

#以下表示部
for (@hoge) {
    print;
}

sub hantei {
    my @array = @_;
    return ( wantarray ) ? @array
                         : $array[0];
}

標準入力からサブルーチンhanteiに引数を渡し、もし与えられた引数が単数ならばその引数を、複数あるならばその引数のリストを返し、表示させるというプログラムです。

大まかな流れはこれでOKかな。

だめぽ。
上記のサンプルコードはwantarray機能の検証を全くしていなかったので、書き直します。

#戻り値がリストコンテキストを要求する場合
my @hoge = &hantei();
for (@hoge) {
    print"$_\n";
}

#戻り値がスカラーコンテキストを要求する場合
my $fuga = &hantei();
print "$fuga\n";


sub hantei {
    return ( wantarray ) ? ('array1', 'array2', 'array3')
                         : 'scalar';
}

これで大丈夫なはず…!
でも、どこか間違っているかもしれないね…!