ハッシュを使用して複雑なデータ構造を構築するルーチンを作成しました。
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
。では、舞台裏で何が起こっているのでしょうか。