0

次のようなハッシュのハッシュでデータを収集しています

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

問題は にあり501ます。2 つのキーが発生しない場合があります。これを検出することは可能ですか?

更新 ハッシュのタイプミスを修正しました。

4

3 に答える 3

4

メイン ハッシュの各キーの下にキーと値のペアを 1 つだけ格納する場合は、代わりに 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残りは1つになります。

また、そのキーの構文エラーですが、タイプミスだと思います。

于 2012-11-02T16:49:00.720 に答える