0

Perl でハッシュ%listvolを配列に入れようとしています。@fileInfo

@fileInfo = ($filename, $data, $index, \%listvol);

%listvolボリュームのリストが含まれています: キー = $vol、値 = $vol。最初の$vol値はABCDEF、次にGFFFFEEEAA- 常に異なります。

次に、配列@fileInfoをハッシュに入れます%listeAllFile

$listeAllFile{$nameOfFile} = [@fileInfo];

%listvol後で、成功せずにハッシュを取得しようとしています。私はこのコードを使用しています:

foreach $key (keys %listeAllFile) {
    @tab      = @{ $listeAllFile{$key} };
    $filename = $tab[0];
    %listvol  = %{ $tab[3] };
    foreach $vol (keys %listvol) {
        print "\n vol is $vol for file $filename";
    }

ファイル名はいつもと違うので大丈夫です。しかし、変数の値$volは常に同じですABCDEF。毎回同じ値を取得しているようです。

誰にもアイデアがありますか?

4

1 に答える 1

2

%listvol問題を再現するためのコードは含まれていませんが、問題は各配列に同じハッシュへの参照を格納していることだと確信しています。

2 番目のエントリの内容を変更する%listvolと、同時に最初のエントリも変更されます。これを修正する 1 つの方法は、{%listvol}代わりに を使用することです\%listvol。前者は、 の現在の内容の浅いコピーを作成するの%listvolと同様[@fileInfo]に、 の現在の内容の浅いコピーを作成します@fileInfo

于 2012-05-11T10:42:52.177 に答える