0

我正在收集哈希中的数据,看起来像

$VAR1 = {
          '502' => {
                     'user2' => '0'
                   },
          '501' => {
                     'git' => '0',
                     'fffff' => '755'
                   },
          '19197' => {
                       'user4' => '755'
                     }
        };

问题出在501. 可能不会出现两个键。有可能检测到这一点吗?

更新 修正了哈希中的错字。

4

3 回答 3

4

如果您只打算在主哈希的每个键下存储一个键值对,为什么不使用 2 元素数组呢?这样,您可以在每次插入之前检查是否存在,而无需检查散列的大小或知道它的键是什么。我提议的结构是这样的:

$VAR1 = {
    '502' => [ 'user2', '0' ],
    '501' => [ 'git', '0' ],
    '19197' => [ 'user4', '755' ]
}
于 2012-11-02T16:56:09.117 回答
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}
}
于 2012-11-02T16:52:33.457 回答
2

keys(%{$VAR1{'501'}}) == 2其余的将是一个。

此外,该键上的语法错误,但我认为这是一个错字。

于 2012-11-02T16:49:00.720 回答