0

次の形式の 2 つの配列があります。

root rhino root root root root root root root root root root domainte root
stam rhino jam onetwo domante ftpsi jay testwp contra raul vnod foos raul bruce

SO から得たヘルプを使用して、両方を次のようにハッシュに入れました。

my %hash;
for my $idx (0 .. $#test2) {
push @{ $hash{ $test2[$idx] } }, $test3[$idx];}
print "<br /><br /><br /><br />";
print Dumper \%hash;

次の出力が得られます。

$VAR1 = { 'rhino' => [ 'rhino' ], 
          'domante' => [ 'raul' ],
          'root' => [ 'stam', 'jam', 'onetwo', 'domante', 'ftpsi', 
                      'jay', 'testwp', 'contra', 'raul', 'vnod', 
                      'foos', 'bruce' ] 
        };

次のように、キーと値を 2 つの配列にプッシュします。

my @q1 = keys %hash;
 my @q2 = values %hash;

 print "<br /><br /><br /><br />";
 print @q1;
 print "<br /><br /><br /><br />";
 print @q2;

印刷中にキーは正しく表示されますが、値は次の出力を印刷します。

ARRAY(0x9bf0b0)ARRAY(0x9bf1e8)ARRAY(0x9bf068)

すべての値を配列に取得するにはどうすればよいですか? 私は何を間違っていますか?

編集:

これが私が試したことです:

foreach (@q1)
{       print @{$hash{$q1}};
        print "<br />";
}

しかし、実行可能な結果は得られませんでした。

4

1 に答える 1

4

ハッシュの値はすべて配列参照です。Data::Dumperすべての値が[ ... ]括弧で囲まれているため、出力からわかります。配列の内容を出力するには、配列参照を逆参照する必要があります。

それを行うには多くの方法があります。必要に応じて変更できる簡潔な方法を次に示します。

print "@$_\n" for @q2;

$_は の要素のエイリアスで@q2あり、配列参照であることを思い出してください。式@$_は参照を逆参照し、配列を返します。二重引用符を入れると、要素間にスペースを入れ@$_て配列のすべての要素が出力されます。

于 2013-10-23T20:09:59.413 に答える