Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

()の中に何かいる

一度勉強した覚えがあるけど忘れてたので、プログラミングPerlを参照したメモ。

$x = (7, 7, 7); #=> 7
$x = () = (7, 7, 7); #=> 3

<6/8追記>
$x = (7, 7, 7); #=> 3
となっていたのは誤りです!
@ 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に右辺の個数が返るというわけか。


この辺り見た目の印象と挙動が違うので、注意しないといけないな。