1

背景

次のように、入力/出力パラメーターに配列を使用する Perl モジュールを取得しました。

Execute({inputfile => $req->{modules}.'filename', param => \@xchange});

モジュール内でハッシュが構築され、参照を介して返されます

$param[0] = \%values;

これはすべて問題なく(私は思う)print Dumper @xchange[0];、目的のコンテンツを次のように出力します

$VAR1 = { '33' => 'Title1', '53' => 'Title2', '21' => 'Title3' };


目標

コンテンツをループして、キーと値のペアを 1 つずつ出力したいと思います。たとえば、次のようになります。

%testhash = ('33' => 'Test1', '53' => 'Test2', '21' => 'Test3' );

foreach $key (keys %testhash) {
    print "LOOP: $key, value=$testhash{$key}\n";
}

print Dumper \%testhash;このループは意図したとおりに機能し、上記の配列要素と同じ出力を介してテストハッシュをダンプします

$VAR1 = { '33' => 'Test1', '53' => 'Test2', '21' => 'Test3' };


問題

問題は、両方の構造が同じ種類のように見えますが、@xchange[0] 内に格納されている返されたハッシュに適切にアクセスする方法がわかりません。

%realhash = @xchange[0];私はandを試し%realhash = \@xchange[0];ましたが、それぞれorprint Dumper \%realhash;を出力します。$VAR1 = { 'HASH(0xa7b29c0)' => undef };$VAR1 = { 'REF(0xa7833a0)' => undef };

したがって、クリーンな新しいハッシュ内で @xchange[0] のコンテンツを取得する方法か、@xchange[0] 要素内のハッシュを foreach ループする方法が必要です。

ハッシュ参照の概念全体にうんざりしていると思いますが、ここで途方に暮れており、グーグルで検索する別の方法が思いつきません。

4

3 に答える 3

6

$xchange[0]ハッシュ参照です。逆参照演算子%{...}を使用して、ハッシュとしてアクセスします。

%realhash = %{$xchange[0]};
于 2013-10-18T14:08:32.560 に答える
1

perldsc

use warnings;
use strict;
use Data::Dumper; 
$Data::Dumper::Sortkeys=1;

my %testhash = ('33' => 'Test1', '53' => 'Test2', '21' => 'Test3' );

# Add hash as first element of xchange AoH
my @xchange = \%testhash;

# Derefererence 1st element of AoH as a hash
my %realhash = %{ $xchange[0] };

# Dump new hash
print Dumper(\%realhash);

__END__

$VAR1 = {
          '21' => 'Test3',
          '33' => 'Test1',
          '53' => 'Test2'
        };
于 2013-10-18T14:11:51.323 に答える