【发布时间】:2017-12-18 19:11:10
【问题描述】:
我在 Perl 脚本中收到错误 Can't use an undefined value as an ARRAY reference。下面是一个高度简化的版本。
基本上,我已经设置了一个数组哈希,其中一些可能为空(在本例中为 B)。如果我不对数据数组进行排序,它就可以正常工作。我尝试添加一个条件来测试该特定数组是否存在,但在此设置中它不喜欢那样。在填充数组时对数组进行排序并不容易(与此示例不同)。
use strict;
use warnings;
my @list = ('A', 'B', 'C');
my %data_for;
$data_for{'A'} = ['apple', 'astronaut', 'acorn'];
$data_for{'C'} = ['car', 'cook', 'candy'];
# Creates error
foreach my $letter (@list) {
print "$letter: ";
foreach my $item ( sort @{$data_for{$letter}}) {
print "$item, ";
}
print "\n";
}
这是我想要的输出(看起来很明显,但是嗯):
A: acorn, apple, astronaut,
B:
C: candy, car, cook,
奇怪的是,如果我首先打印工作版本(不带排序),那么带有排序的第二个版本可以正常工作。我不明白这一点,但我可以将其用作解决方法。
【问题讨论】:
-
加一个用于提出一个更简单的示例来演示您的问题
-
@mob - 我会说考虑到数组散列的复杂程度,我别无选择,但我知道有些可能有多糟糕。从技术上讲,这个问题是重复的,但我根本无法理解之前那些代码不连贯的问题,这会导致答案不完整。
-
我很惊讶它甚至没有进入 Merriam-Webster,但 setup 没有任何地方的英语动词。似乎有一种从短语中删除空格的时尚,这使得美式英语越来越像德语。我不喜欢它。很抱歉,这太离题了。
-
@Borodin - 它可能是一个重复的问题标题,但该代码没有清楚地显示问题出在哪里,并且接受的答案是“使用诊断。关于这个相同的错误代码还有另一个问题,但是代码太混乱了,以至于他们无法弄清楚它是用什么写的(perl、python、php??)——最终的答案是“使用诊断”。我的问题得到了一个实际的答案,可以解释什么是错误的。
-
重新打开,但在这个被标记为重复的问题上没有任何用处。 This one 是一个实际的副本,但我宁愿关闭旧的,而不是这个更清晰的新的。我已经这样做了。