2

ハッシュには 2 つのリストがあります。

my  @family1= (
{
   husband  => "barney",
   wife     => "betty",
   son      => "bamm bamm",
},
   husband => "george",
   wife    => "jane",
   son     => "elroy",
},
);

my @family2{
   wife    => "jane",
},
);

キーの構造は両方のリストで異なり、@family1 にはないキー「妻」を取得する必要があります。たとえば、この場合は「betty」です。

私は次のようなことを考えました:

foreach my $f1(@family1)
{
   foreach my $f2 (@family2)
   {
     if (($f1->{wife} ne $f2 -> {wife})
      { 
       print MYFILE Dumper ($f1->{wife});
      }
   }
}

私がそのようなことをするとき、私が期待するものを得ることはできません。私は n 回 f1->{wife} を取得します。取得したいのは次のとおりです。

@sameWife = ("betty");

誰かがより良い解決策を持っていますか? ありがとう

4

2 に答える 2

1

別のアプローチ:

my %foo; # temp hash
# only use the wife from each has; parens are to seperate the two maps
$foo{$_}++ for ( map { $_->{wife} } @family1 ), map { $_->{wife} } @family2;
# only use the names that appear once
print grep { $foo{$_} == 1 } keys %foo;
于 2013-05-13T14:57:31.383 に答える