$ perl -e 'print (2 + 3) * 4'
と
$ perl -e 'print STDOUT (2 + 3) * 4'
では挙動が異なる。
というか、こういう書き方をしてはいけないようだ。
ここで「20」という答えが欲しければ、
$ perl -e 'print((2 + 3) * 4)'
$ perl -e 'print + (2 + 3) * 4'
という書き方をすべき、らしい。
"perldoc -f print"で調べてみると、
Also be careful not to follow the print keyword with a left parenthesis unless you want the corresponding right parenthesis to terminate the arguments to the print‐‐interpose a "+" or put parentheses around all the arguments.
というようなことが書いてある。引数が"("で始まるならば")"で終われ、もしくは引数の前に"+"を書け、ということらしい。
参考情報:PerlÖt@X print -- KeyFGwT
一番上の例だと、printの後に"("があるから")"までの間"2+3"だけがprint関数の引数として実行され、その結果trueに4が掛けられるだけになる。2番目の例だと…"STDOUT"が第1引数に入っていて"("で始まるわけじゃないから"(2 + 3) * 4"を評価した結果をprintしてくれる、…のかな?