2011-01-28 71 views
1

目前我正在Perl編程和正在運行到語句是這樣的:逗號分隔的操作在Perl中如何工作?

return bless { }, $type; 

我知道return bless { };會做的,我也知道什麼return $type;會做,但如何用逗號分隔它們影響的聲明,並且它對所有一元運算符都以同樣的方式工作嗎?

+4

保佑有兩個變種:`祝福REF,CLASSNAME`和`祝福REF`。所示的符號等同於`return bless(REF,CLASSNAME);` – 2011-01-28 06:06:20

回答

5

bless不是一元運算符,所以會發生的是$type被傳遞到bless(它被用作類的名稱以保佑hashref進入)。

唯一的特別之處return的是,在其右側的表達可能在列表中,標量,或者根據上下文的子程序被稱爲無效的情況下進行評估。

comma operator沒有解釋任何在return語句中與在其他任何地方不同(除非通過查看return語句無法確定它是在列表還是標量上下文中)。

+0

因此,perl中的所有逗號都是列表中的單獨元素? – chustar 2011-01-28 06:59:49

+0

@chustar,「在標量環境中,它評估其左邊的參數,將該值拋棄,然後評估其正確參數並返回該值。」在列表上下文中,它只是分隔列表中的項目。 – cjm 2011-01-28 10:12:02

2

可以使用或不使用圓括號來調用預定義的Perl函數。來自其他語言的大多數人將關鍵字/操作員的這些功能混淆了。

祝福,undef,push,pop,shift,unshift,print,split,join等都是功能。

因此,這兩個是相同的:

return bless { }, $type; 
return bless({ }, $type); 

但是這兩個都不是:

print 2 * 3 + 2; # prints 8 
print(2 * 3) + 2; # prints 6 (with a warning if warnings pragma is on)