-1
foreach my %hash (%myhash1,%myhash2,%myhash3)
{
   while (($keys,$$value) = each %hash)
   {
      #use key and value...
   }
}

なぜこれが機能しないのですか:

foreach 行に構文エラーが表示されます。なぜそれが間違っているのか教えてください。

4

2 に答える 2

4

これは間違っています。これにより、各ハッシュに個別の構造としてアクセスできるようになると考えているように見えますが、実際に行っているのは、構文エラーに加えて、混合された新しいリストとしてハッシュにアクセスすることです。例えば:

my %hash1 = qw(foo 1 bar 1);
my %hash2 = qw(abc 1 def 1);

for (%hash1, %hash2)  # this list is now qw(foo 1 bar 1 abc 1 def 1)

ハッシュ (または配列) をリスト コンテキスト ステートメントに配置すると、それらは要素に展開され、整合性は保持されません。一部の組み込み関数ではこの動作が許可されていますが、通常の Perl コードでは許可されていません。

また、イテレータ変数としてハッシュを割り当てることはできませんfor。これはスカラー値にしかできません。あなたができることはこれです:

for my $hash (\%myhash1, \%myhash2, \%myhash3) {
    while (my ($key, $value) = each %$hash) {
        ...

つまり、ハッシュ参照のリストを作成し、それらを反復処理します。このアプローチでは、ハッシュの違いを見分けることができないことに注意してください。

my $hashこの変数はスカラーでなければならないため、使用することにも注意してください。

于 2013-07-20T10:10:42.603 に答える
1

構文は次のようになります。

my $hash1 = {'a'=>1};
my $hash2 = {'b'=>1};

my @arr2 = ($hash1, $hash2);

foreach $hash (@arr2)
{
                while(($key, $value) = each %$hash)
                {
                                print $key, $value;
                }
}

ハッシュを参照してから逆参照する必要があります。

于 2013-07-20T10:22:33.587 に答える