我的代码是
my $r = ['111','222','aaa','bbb'];
print $r;
my $s = ('111','222','aaa','bbb');
print $s;
我能理解的第一个打印结果是,$r是一个引用,打印结果类似于"ARRAY(0x44444444)“。
但是我不明白为什么第二个例子,打印$s给了我最后一个元素,bbb,为什么?
发布于 2017-09-26 18:09:12
逗号运算符,
的功能取决于上下文。有列表上下文和标量上下文需要考虑。
在列表上下文中,逗号操作符分隔列表中的项。如果左侧是数组或包含在括号中,则赋值会将列表上下文施加在右侧:
my ($s) = (1, 2, 3); #=> $s = 1, rest discarded
(my $s) = (1, 2, 3); # the same
my @arr = (1, 2, 3); #=> @arr = (1, 2, 3)
在标量上下文中,Perl希望我们提供单个值。然后,逗号操作符的工作方式就像在C或其他语言中一样:计算所有表达式,并丢弃它们的值。只保留最后一个值:
my $s = (1, 2, 3); #=> $s = 3, previous items discarded
另请参阅:Comma Operator in perldoc perlop
请注意,括号(...)
不会创建数组。它们仅用于控制优先级。在$s = (1, 2, 3)
中,数组是必需的,因为$s = 1, 2, 3
将被解析为($s = 1), 2, 3
。
https://stackoverflow.com/questions/46423286
复制相似问题