gpt4 book ai didi

perl - 了解分配给空数组

转载 作者:行者123 更新时间:2023-12-01 15:19:45 30 4
gpt4 key购买 nike

来自 perldoc,在 perldata ,有一行代码如下:

$count = () = $string =~ /\d+/g;

它说 $count 将被设置为匹配的数量,因为分配给括号意味着分配给空列表并且它转换为列表上下文。但是当我这样做时:

print (() = $string =~ /\d+/g);

我原本希望打印一组匹配项,但它什么也没打印。如果空列表什么都没有,那么之前从 () 到 $count 的赋值是如何工作的?第一个分配给空列表是什么意思,它实际上做了什么?


更具体地说,

print $string =~ /\d+/g;                     #print all matches
print (() = $string =~ /\d+/g); #print nothing (why)
print ($count = () = $string =~ /\d+/g); #print number of matches (why again)

最佳答案

主要区别(perldoc perldata):

List assignment in scalar context returns the number of elements produced by the expression on the right side of the assignment:

$x = (($foo,$bar) = (3,2,1)); # set $x to 3, not 2

使用 $count = () = $string =~/\d+/g;,您将标量上下文强加到列表赋值上,因此匹配的数量 - 由 生成的元素$string =~/\d+/g - 将存储在 $count 变量中。

但是对于 print(() = $string =~/\d+/g);,它是不同的:

Because print takes a LIST, anything in the LIST is evaluated in list context

并且在列表上下文中,列表赋值结果是赋值的左侧 - 正如您可能猜到的那样,在这种情况下是一个空列表。打印出来,它只是给你一个空字符串。

我希望这个例子有助于说明上下文在这里造成的差异。

my ($a, $b);
my $x = ($a, $b) = (1,2,3,4);
say $x; # 4
my @x = ($a, $b) = (1,2,3,4);
say join '-', @x; # 1-2

关于perl - 了解分配给空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23307965/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com