第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