加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 标量语法中的列表赋值

发布时间:2020-12-15 21:27:14 所属栏目:大数据 来源:网络整理
导读:标量上下文中的列表分配返回右侧的元素数: scalar(my ($hello,$there,$world) = (7,8)); #evaluates to 2 为什么它评估右手边并产生2,而不是新定义的列表被评估和返回3? 对我来说,似乎$hello得到7,$有8,$world获取undef,那么该列表在标量上下文中被评估,这
标量上下文中的列表分配返回右侧的元素数:
scalar(my ($hello,$there,$world) = (7,8)); #evaluates to 2

为什么它评估右手边并产生2,而不是新定义的列表被评估和返回3?

对我来说,似乎$hello得到7,$有8,$world获取undef,那么该列表在标量上下文中被评估,这将导致3,因为列表中的元素数量($hello $there $world).对我来说似乎很奇怪,上下文影响返回的评估表达式的哪一部分:

my $greeting = (($hello,8)); #2

my @greeting = (($hello,8));
my $greeting_length = @greeting; #3

解决方法

记录在 perlop右边的元素(分配运算符部分的最后一句):

Similarly,a list assignment in list context produces the list of lvalues assigned to,and a list assignment in scalar context returns the number of elements produced by the expression on the right hand side of the assignment.

它的工作原理是这样的,所以你可以写这样的东西:

while (my ($key,$value) = each %hash) { ... }

如果它计算了赋值左边的元素数量,那将是一个无限循环.

如果您考虑到这一点,左侧的元素数量可能与右侧相同,或者是常数(当您分配到标量列表时).在第一种情况下,您计算的方面没有什么不同,在第二种情况下,计数右侧更有用.

另一方面,在列表上下文中,赋值运算符返回左侧列表,因为这更有用.如果您在修改列表元素的上下文中使用它,则要修改刚分配给的变量.

Re:你的评论在你的例子中,(7,8)是一个双元素列表,这就是为什么赋值操作符返回2.当你将一个较短的列表分配给一个更长的标量列表时,右边不是“填充在发生任务之前,使用undef.相反,没有与右侧列表相关联的值的任何变量都将重置为其默认值.对于一个标量变量,那就是undef.对于数组,这是一个空数组.对于散列,这是一个空的哈希.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读