我目前正在学习Perl编程,并且遇到了这样的语句:
return bless { }, $type;
我知道return bless { };
会做什么,我也知道return $type;
会做什么,但是如何用逗号分隔它们会影响语句,并且它对所有一元运算符的工作方式是否相同?
答案 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)