发布
社区首页 >问答首页 >在perl中将数组赋值给标量的行为是怎样的?

在perl中将数组赋值给标量的行为是怎样的?
EN

Stack Overflow用户
提问于 2017-09-26 17:56:45
回答 1查看 391关注 0票数 0

我的代码是

代码语言:javascript
代码运行次数:0
复制
my $r = ['111','222','aaa','bbb'];
print $r;
my $s = ('111','222','aaa','bbb');
print $s;

我能理解的第一个打印结果是,$r是一个引用,打印结果类似于"ARRAY(0x44444444)“。

但是我不明白为什么第二个例子,打印$s给了我最后一个元素,bbb,为什么?

EN

回答 1

Stack Overflow用户

发布于 2017-09-26 18:09:12

逗号运算符,的功能取决于上下文。有列表上下文和标量上下文需要考虑。

在列表上下文中,逗号操作符分隔列表中的项。如果左侧是数组或包含在括号中,则赋值会将列表上下文施加在右侧:

代码语言:javascript
代码运行次数:0
复制
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或其他语言中一样:计算所有表达式,并丢弃它们的值。只保留最后一个值:

代码语言:javascript
代码运行次数:0
复制
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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46423286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档