在 Perl 中删除数组中的 undef

Remove undef in an array of array in Perl

我正在尝试从具有 undef 值的数组中删除元素。

我希望输出为:

@list = [
      [
        2,
        ""
      ],
      [
        4,
        ""
      ],
      [
        6,
        ""
      ],
      [
        8,
        ""
      ],
      [
        10,
        ""
      ],
    ];

这就是我一直试图从数组中删除 undef 的原因。我正在从数组中搜索定义的元素,但它不起作用

use Data::Dumper;

my @list = [
  [
    undef,
    ""
  ],
  [
    2,
    ""
  ],
  [
    4,
    ""
  ],
  [
    6,
    ""
  ],
  [
    8,
    ""
  ],
  [
    10,
    ""
  ],
];

@list = grep defined, @list;

print Dumper(\@list);

有人可以帮忙吗?

提前致谢

人们经常对 Perl 中的列表和数组感到困惑。所以调用数组变量 @list 是一个非常糟糕的主意:-)

正如我在评论中提到的,您似乎对如何在 Perl 中填充数组感到困惑。您可以使用列表填充它:

my @array = ( ... ); # Lists use parentheses

或者您创建一个匿名数组并将对该数组的引用存储在一个标量变量中:

my $array_ref = [ ... ]; # Anon array uses square brackets

接下来,您的数组不包含 undef 个元素。数组中的每个元素都是对二元素数组的引用。在其中一个二级数​​组中,第一个元素是 undef。你用grep过滤数组是对的,但是你要看二级数组才行。

所以代码看起来像这样:

my @array = ( ... );

@array = grep { defined $_->[0] } @array;

请注意,我已切换到 grep 的块语法。这是最常用的版本,最好使用该语法。