【发布时间】:2014-10-27 05:27:34
【问题描述】:
下面的代码通过给出这个警告消息让我困惑了一段时间:Use of uninitialized value in join or string at ./mycode.pl line 666. where line 666: print "@{n0->{$x}{$y}}\n";。请注意,n 是字符串数组的哈希值,如下所示:
n = (
x0 => {
y0 => [ "foo00", "bar00" ]
y1 => [ "foo01", "bar01" ]
...
}
x1 => {
y0 => [ "foo10", "bar10" ]
y1 => [ "foo11", "bar11" ]
...
}
...
)
代码如下:
my $rn =\%n;
for my $x (keys %$rn){
print "$x\n";
for my $y (keys %{$rn->{$x}}){
print "@{$rn->{$x}{$y}}\n";
}
}
我不明白 Perl 为什么要抱怨uninitialized values。本质上,我希望元素必须具有值,否则它们甚至不会存在,因此不会出现在迭代中。此外,输出符合我的预期。
我在这里想念的症结是什么?我怎样才能摆脱它?
【问题讨论】:
-
不知道这是不是唯一的问题,但
@{rn...应该是@{$rn... -
@ysth 谢谢,这是一个错字。我修正了问题描述。
-
您不应在问题中输入代码。你应该剪切和粘贴你已经运行的代码,你肯定会按照你说的那样工作。在进行故障排除时,我们没有使用近似代码,我们需要细节。最好创建一个 sscce 来证明您的问题。
-
@TLP 我完全按照你说的做了。除了输入
n。检查第一个答案是如何根据问题做出的。 -
@AliAbbasinasab,不,你没有抄袭。因为你的 666 (devil) 行是:
print "@{n0->{$x}{$y}}\n";所以,而不是你使用n0的真实代码中的演示代码$rn。所以,它不是“副本”。 ;)
标签: perl hash foreach warnings