2

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

return bless { }, $type;

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

4

2 回答 2

5

bless不是一元运算符,所以会发生什么$type被传递给bless(它被用作类的名称来祝福 hashref 进入)。

return唯一的特殊之处在于,它右侧的表达式可能会在列表、标量或 void 上下文中求值,具体取决于调用子例程的上下文。

逗号运算符在语句中的解释与在其他任何地方没有任何不同return(除了您无法通过查看return语句来判断它是在列表还是标量上下文中)。

于 2011-01-28T05:37:31.413 回答
2

可以使用或不使用括号来调用预定义的 Perl 函数。大多数来自其他语言的人将这些功能与关键字/运算符混淆。

bless、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)
于 2011-01-28T06:15:35.213 回答