我有很多记录的$ arr,但是为了简单起见,我在这里只显示了2条记录:
$arr = [
{
'a' => 1,
'b' => 2,
'c' => 'failed'
},
{
'a' => 5,
'b' => 6,
'c' => 'success'
},
{...}, {...}, {...}
];
我想循环通过$ arr并忽略任何带有'c'='success'的记录,并放入一个新的$ newarr;还是可以覆盖$ arr而不是创建一个新的$ newarr。
$newarr = [
{
'a' => 1,
'b' => 2,
'c' => 'failed'
}
];
答案 0 :(得分:4)
一个简单的grep
应该可以达到以下目的:
@{}
取消引用数组ref grep {}
将过滤器应用于结果列表$_->{c] ne 'success'
应该应用于每个元素的过滤器grep
是列表中每个元素的别名$_
:在您的情况下,每个列表元素都是哈希引用$->{c}
取消引用哈希引用以检索键c
的值@{ $arr }
和@new
包含对相同哈希引用的引用。有关详细信息,请参见perlfunc。
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $arr = [
{
'a' => 1,
'b' => 2,
'c' => 'failed',
},
{
'a' => 5,
'b' => 6,
'c' => 'success',
},
];
my @new = grep { $_->{c} ne 'success' } @{ $arr };
print Dumper(\@new);
exit 0;
试运行:
$ perl dummy.pl
$VAR1 = [
{
'c' => 'failed',
'b' => 2,
'a' => 1
}
];