()の中に何かいる
一度勉強した覚えがあるけど忘れてたので、プログラミングPerlを参照したメモ。
$x = (7, 7, 7); #=> 7 $x = () = (7, 7, 7); #=> 3
<6/8追記>
$x = (7, 7, 7); #=> 3
となっていたのは誤りです!
@akajiro thanks!
</追記>
下はなぜ3なんだろう?
プログラミングPerlにあった例。
$x = ( ($a, $b) = (7, 7, 7) ); #=> $xは2ではなく、3 $x = ( ($a, $b) = funk() ); #=> $xはfunk()が返した値の個数 $x = ( () = funk() ); #=> $xはfunk()が返した値の個数 P.88
なるほど。
最初に評価される、
($a, $b) = (7, 7, 7)
は実際には
($a, $b, undef) = (7, 7, 7)
のように実際の個数が左辺に渡って、そのあとvoidなものになるイメージのようだ。
だから上記の
$x = () = (7, 7, 7);
も実際には
$x = (undef, undef, undef) = (7, 7, 7);
のようになり、$xに右辺の個数が返るというわけか。
この辺り見た目の印象と挙動が違うので、注意しないといけないな。