gpt4 book ai didi

perl - 为什么这会返回空字符串?

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

我在生产中发现了一段我不太理解的代码片段。我试图将其范围缩小到一个简单的示例:

%hash = {
'a' => 'apple',
'b' => 'banana',
'c' => 'cherry'
};

my $v = "Hello, " . '+' foreach (keys %hash);

print "Value = \"$v\"\n";

当我运行这个时,$v 的值是空字符串,这令人惊讶。我也很好奇为什么。 '+' foreach( ... ) 不会导致错误 - 我什至在 '+' 和 foreach( ... ) 之间没有运算符,这怎么可能不会导致语法错误?

最佳答案

您应该使用警告;

Reference found where even-sized list expected at test.pl line 3.

您将单个值(哈希引用)分配给 %hash,而不是键/值对列表。

您还应该使用 strict;

Use of uninitialized value $v in concatenation (.) or string at test.pl line 12.

您已将 my $v 放入 for 循环中,因此它的范围仅限于该循环。

此代码现在没有语法错误:

use strict;
use warnings;

my %hash = (
'a' => 'apple',
'b' => 'banana',
'c' => 'cherry'
);

my $v;

$v = "Hello, " . '+' foreach (keys %hash);

print "Value = \"$v\"\n";

...但是每次循环时都会用相同的字符串 ("Hello, ". '+') 覆盖 $v

<小时/>

how can this possibly not cause a syntax error?

由于您没有启用use strict,因此允许发生许多可怕的事情。如果不使用 use strict,运行几乎没有什么用处。

I don't even have an operator between '+' and foreach( ... )

您的代码相当于:

foreach (keys %hash) {
my $v = "Hello, " . '+';
}

foreach 之前或 +' 之后放置运算符是没有意义的。

关于perl - 为什么这会返回空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22947329/

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