gpt4 book ai didi

perl - Perl 中的标量与列表上下文

转载 作者:行者123 更新时间:2023-12-01 01:08:16 25 4
gpt4 key购买 nike

我在 O'Reilly 的一本书中发现了一个有点奇怪的例子:

@backwards = reverse qw/ yabba dabba doo /;
print "list context: @backwards\n";
$backward = reverse qw/ yabba dabba doo /;
print "scalar1 context: $backward\n";
$notbackward = qw/ yabba dabba doo /;
print "scalar2 context: $notbackward\n";
print "print context: ",reverse qw/ yabba dabba doo /;
print "\n";

输出是:
list context: doo dabba yabba
scalar1 context: oodabbadabbay
scalar2 context: doo
print context: doodabbayabba

我不明白的是 scalar1语境:

这本书说“反转某些东西”给出了一个列表上下文,所以我猜 qw/ yabba dabba doo /被视为一个列表和 reverse qw/ yabba dabba doo /作为('doo','dabba','yabba')。
$backward = something也是如此这意味着某物是标量,所以我期待结果“doo dabba yabba”,但它是不同的:“oodabbadabbay”。

我想,原因是因为不能直接将列表设置为标量。所以我做了 scalar2测试:仅打印列表中的最新项目。为什么?为什么不在 scalar1 测试中?

标量测试输出如何工作?

最佳答案

首先,qw/ yabba dabba doo /只是 ('yabba', 'dabba', 'doo') 的语法糖.他们的意思是一样的。

reverse函数需要一个列表。在列表上下文中,它反转列表。在标量上下文中,它是 join('', @list)然后反转该字符串中的字符并返回它。

请记住

$backward = reverse qw/ yabba dabba doo /;
$notbackward = qw/ yabba dabba doo /;

方法
$backward = reverse ('yabba', 'dabba', 'doo');
$notbackward = ('yabba', 'dabba', 'doo');
reverse函数提供列表上下文和 $notbackward =给我们标量上下文。这意味着逗号运算符在第一行在列表上下文中,在第二行在标量上下文中。在列表上下文中, comma operator创建一个列表。在标量上下文中,它评估两个操作数并返回右侧的一个。这意味着 ('yabba', 'dabba', 'doo') 的值在标量上下文中是 'doo' ,这就是分配给 $notbackward 的内容.

关于perl - Perl 中的标量与列表上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5170720/

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