我正在以哈希的散列形式收集数据,看起来像
$VAR1 = {
'502' => {
'user2' => '0'
},
'501' => {
'git' => '0',
'fffff' => '755'
},
'19197' => {
'user4' => '755'
}
};
问题出在501
。可能不会出现两个键。有可能发现这个吗?
更新 修正了哈希的拼写错误。
答案 0 :(得分:4)
如果您只想在主哈希的每个键下存储一个键值对,为什么不使用2元素数组呢?这样,您可以在创建每个新插入之前检查是否存在,而无需检查哈希的大小或知道其键是什么。我建议的结构是:
$VAR1 = {
'502' => [ 'user2', '0' ],
'501' => [ 'git', '0' ],
'19197' => [ 'user4', '755' ]
}
答案 1 :(得分:3)
假设您的hashref名为 $ var :
my @bad = grep { scalar keys %{$var->{$_}} > 1 } keys %$var;
导致其中包含多个hashref的哈希键数组。使用上面的数据:
# perl test.pl
$VAR1 = {
'501' => {
'git' => '0',
'fffff' => '755'
},
'502' => {
'user2' => '0'
},
'19197' => {
'user4' => '755'
}
};
$VAR1 = '501';
然后您可以使用以下方法访问被检测为不良的每个元素:
foreach my $key ( @bad ) {
# do something to or with $var->{$key}
}
答案 2 :(得分:2)
keys(%{$VAR1{'501'}}) == 2
其余的将是一个。
此外,该键的语法错误,但我认为这是一个错字。