为什么我似乎无法从 Perl 的数组中删除未定义的元素?

dgB*_*gBP 3 arrays perl list

我有一个来自哈希表中数据的字符串数组。我试图删除任何(显然)空元素,但由于某种原因,似乎有一个顽固的元素拒绝去。

我在做:

# Get list array from hash first, then
@list = grep { $_ ne ' ' } @list; 
@list = uniq @list;
return sort @list;
Run Code Online (Sandbox Code Playgroud)

在这一grep行,我收到了Use of uninitialized value in string ne...下面正确打印的数组其余部分的消息。

我试过以“长”的方式做到这一点:

foreach (@list) {
    if ($_ ne ' ') {
        push @new_list, $_;
    }
}
Run Code Online (Sandbox Code Playgroud)

但这会产生完全相同的结果。我尝试使用defined预期的结果(没有)。

我可以预先对数组进行排序并删除第一个元素,但这似乎非常冒险,因为我不能保证数据集总是有空白元素。诉诸正则表达式似乎也有些过分,但也许我错了。像往常一样,我确定我遗漏了一些非常简单的东西。

ike*_*ami 5

元素不能为空。您正在尝试删除未定义的元素。但是您不是在检查元素是否未定义,而是在检查它是否包含由单个空格组成的字符串。你要:

@list = grep defined, @list; 
Run Code Online (Sandbox Code Playgroud)