作者: dune
日時: 2004/8/28(23:53)
極悪です。

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?