0

ハッシュを使用して複雑なデータ構造を構築するルーチンを作成しました。

use strict;
my %th1 = ();
my %th2 = ();
my $idx = 0;

$th2{"suffix"} = "A";
$th2{"status"} = 0;
$th2{"consumption"} = 42;

$th1{$idx} = \%th2;

$idx++;

$th2{"suffix"} = "B";
$th2{"status"} = 0;
$th2{"consumption"} = 105;

$th1{$idx} = \%th2;

for my $key1 (keys %th1)
{
    for my $key2 (keys %{$th1{$key1}})
    {
        print "Key1=$key1, Key2=$key2, value=" . $th1{$key1}->{$key2} . "\n\n";
    }
}

私の質問は、ハッシュ参照が割り当てられたときに、最初のデータセットが$idx == 0破損していないのはなぜですか?

ハッシュ参照が割り当てられたときに作成されたコピーはありました$th1{$idx} = \%th2;か?

この行が実行されると

$th2{"suffix"} = "B";

ハッシュ値が$th1{0}壊れていないのはなぜですか?

値は壊れていませんが、これらの値を保持するメカニズムに興味があります。コードは の新しいコピーを明示的に作成していません%th2。では、舞台裏で何が起こっているのでしょうか。

4

3 に答える 3