第63回 print (1+1)*5 は 2

次のソースを実行してほしい。

use strict;

print (1+1)*5;

結果は、あなたの予想に反して

2

となるであろう。なぜだろう? 2*5で10となってほしいところである。


これは、( ) が関数呼び出しの( ) と認識されてしまっているためである。

print('Hello World');

のように、print関数呼び出しの( )とperlが認識したということである。


だから、
2
が表示されたのである。



タイトルに

print (1+1)*5 は 2

と書いたが、
実は、

print (1+1)*5 は 5
でもある

print は何か表示すると返り値1を返すのである。だから

use strict;

print print (1+1)*5;

を実行すると、

25

と表示される。
始めの2は、

print(1+1)

が表示したものである。この式が1を返すので、

print 1*5

となり 5が表示される。 2の後に改行はないので、続けて5が表示されるので

25

と表示されたわけである。



ではどうすれば、関数呼び出しの( ) ではないとperlに認識させることができるのであろうか?

それは、( )の前に + をつけて

print +(1+1)*5

とすればよいのだ。

use strict;

print +(1+1)*5;

結果:

10

参考資料:
IBM Developer 日本語版 : 大変申し訳ありません。このページは無効です。