逗号分隔操作如何在perl中工作?

时间:2011-01-28 05:25:34

标签: perl reference bless

我目前正在学习Perl编程,并且遇到了这样的语句:

return bless { }, $type;

我知道return bless { };会做什么,我也知道return $type;会做什么,但是如何用逗号分隔它们会影响语句,并且它对所有一元运算符的工作方式是否相同?

2 个答案:

答案 0 :(得分:5)

bless不是一元运算符,所以会发生$type传递给bless(其中它被用作类的名称以保护hashref)。

关于return的唯一特别之处在于,右侧的表达式可能会在列表,标量或void上下文中进行计算,具体取决于调用子例程的上下文。

return语句中的comma operator与其他任何语句的解释没有任何区别(除了你不能通过查看{{1}来判断它是否在列表或标量上下文中声明)。

答案 1 :(得分: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)