Subscribed unsubscribe Subscribe Subscribe

print関数の引数

$ 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 -- KeyFŽGŠwŽ–“T


一番上の例だと、printの後に"("があるから")"までの間"2+3"だけがprint関数の引数として実行され、その結果trueに4が掛けられるだけになる。2番目の例だと…"STDOUT"が第1引数に入っていて"("で始まるわけじゃないから"(2 + 3) * 4"を評価した結果をprintしてくれる、…のかな?