2011-01-28 73 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)