gpt4 book ai didi

Perl - 具有修改后数据的新哈希项,源自另一个条目的馈线哈希,破坏了第一个条目

转载 作者:行者123 更新时间:2023-12-05 09:31:49 24 4
gpt4 key购买 nike

我正在尝试添加一个哈希条目和一个新的、更新的哈希条目,它们来自相同的馈线哈希和原始数据。

但是,当我更新第二个条目的数据时...它破坏了原始条目...即使该数据没有更改...它只能更改,因为两者都是从同一个馈线分配的哈希条目。

这是我为测试此问题而创建的测试程序中的示例子例程 - 它使用 Tk 进行输出...

sub hash_issue {
my %feeder = ();
my %global = ();
my %personal = ();

my $key = 'John';
my $new_key = 'Johnathan';

$feeder{$key}{First_Name} = 'John';
$feeder{$key}{Last_Name} = '';
$feeder{$key}{Address} = '123 Main Street';
$feeder{$key}{City} = 'Springfield';
$feeder{$key}{State} = '';
$feeder{$key}{Zip} = '';
$feeder{$key}{Is_Registered} = 0;

$global{$key} = $feeder{$key};
$main->Output->Append("First Name = $global{$key}{First_Name} Last Name = $global{$key}{Last_Name} Address = $global{$key}{Address} Registered = $global{$key}{Is_Registered}\r\n");
$global{$new_key} = $feeder{$key};
$global{$new_key}{First_Name} = $new_key;
$global{$new_key}{Is_Registered} = 1;
$main->Output->Append("First Name = $global{$key}{First_Name} Last Name = $global{$key}{Last_Name} Address = $global{$key}{Address} Registered = $global{$key}{Is_Registered}\r\n");
$main->Output->Append("First Name = $global{$new_key}{First_Name} Last Name = $global{$new_key}{Last_Name} Address = $global{$new_key}{Address} Registered = $global{$new_key}{Is_Registered}\r\n");
}

这是输出...

名字 = John 姓氏 = 地址 = 123 Main Street Registered = 0

名字 = Johnathan 姓氏 = 地址 = 123 Main Street Registered = 1

名字 = Johnathan 姓氏 = 地址 = 123 Main Street Registered = 1

(添加额外的行来清理帖子...)

我如何修改它以防止破坏原始条目...真实代码包含更多子散列的键。

最佳答案

你的问题在这里

$global{$new_key} = $feeder{$key};

这只会复制一个引用。如果您想要实际副本,则需要克隆您的数据。

use Clone qw( clone );
$global{$new_key} = clone( $feeder{$key} );

关于Perl - 具有修改后数据的新哈希项,源自另一个条目的馈线哈希,破坏了第一个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68566710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com