我有以下散列(print Dumper(\%hash)的结果)
$VAR1 = {
'A' => [
[
'1',
'PRESENT_1',
'ABSENT_2',
],
[
'2',
'PRESENT_1',
'ABSENT_2',
]
],
'B' => [
[
'5',
'PRESENT_1',
'ABSENT_2',
],
[
'6',
'PRESENT_1',
'ABSENT_2',
],
[
'7',
'ABSENT_1',
'PRESENT_2',
]
]
};我正在循环哈希&我想检查我是否可以在每个‘grep’数组中找到一个特定值。但是,我在这里肯定做错了什么。数组'B‘的IF条件应为TRUE,但对于'A’则不应为TRUE。在'A‘中你只有'PRESENT_1’和‘PRESENT_1_2’,所以这应该会导致FALSE。在数组'B‘中,你同时有'PRESENT_1’和'PRESENT_2',所以结果应该是真的。
for my $key (keys %hash) {
if (( grep /"PRESENT_1"/, @{$hash{$key}} ) & ( grep /"PRESENT_2"/, @{$hash{$key}} )) {
print "# OK: " , $key, " ", @{$hash{$key}}, "\n";
} else {
print "# DISCARD: " , $key, " ", @{$hash{$key}}, "\n";
}
}我想我的问题和这个类似:Perl Grep issue in nested hash/array,但是我不能让它工作。
有人能看到哪里出了问题吗?
发布于 2021-04-30 21:35:21
您需要再取消一个级别的引用。链接的问题是一个HoA结构,但您有一个HoAoA。
use warnings;
use strict;
my $VAR1 = {
'A' => [
[
'1',
'PRESENT_1',
'ABSENT_2',
],
[
'2',
'PRESENT_1',
'ABSENT_2',
]
],
'B' => [
[
'5',
'PRESENT_1',
'ABSENT_2',
],
[
'6',
'PRESENT_1',
'ABSENT_2',
],
[
'7',
'ABSENT_1',
'PRESENT_2',
]
]
};
my %hash = %{ $VAR1 };
for my $key (keys %hash) {
my $p1 = 0;
my $p2 = 0;
for my $aref (@{ $hash{$key} }) {
$p1 = 1 if grep /PRESENT_1/, @{ $aref };
$p2 = 1 if grep /PRESENT_2/, @{ $aref };
}
if ($p1 and $p2) {
print "# OK: $key\n";
}
else {
print "# DISCARD: $key\n";
}
}输出:
# DISCARD: A
# OK: Bhttps://stackoverflow.com/questions/67334383
复制相似问题