極悪です。
printf が引数のリファレンスを受け取るものとして(普通に
サブルーチンを書くと、@_ は引数のエイリアスになっている)
printf("%d%d%d\n",$i++,$i++,$i++);
と書いた場合、printf が受け取るのはインクリメントされる
前の $i の *コピー* のリファレンス(=3つの異なるオブ
ジェクトが存在している)、
printf("%d%d%d\n",++$i,++$i,++$i);
と書いた場合、printf が受け取るのはインクリメントされた
後の $i のリファレンス(= オリジナルの $i そのもの、
つまり3回インクリメントされた後の値が見える)、
と考えるとつじつまが合うかなと思ってます。とはいえ、
>この場合の評価順序って少なくともC/C++では未定義(処理系
>定義?)だったかと。
ということなら、こういう書き方をすることがそもそも間違い
で、その結果がどうなるかは言語の仕様の範囲外ってことです
ね。
--
極悪, FZH01112 at nifty.com
http://hpcgi1.nifty.com/dune/gwiki.pl?