perl - Perl 中的哈希复制和删除

标签 perl hash

我想备份哈希,保留原始哈希,并使用备份的哈希数据。

并删除了备份哈希数据。

但是,原始哈希数据已被删除。

这是代码。

my %hash = (
    'data1' => {
        'data2' => {
            'data3' => 'one',
        },
    },
);
foreach (1..3) {
    my %hash_backup = %hash;
    print $hash{'data1'}->{'data2'}->{'data3'},"\n";
    print $hash_backup{'data1'}->{'data2'}->{'data3'},"\n";
    print "-------------------------------\n";

    delete $hash_backup{'data1'}->{'data2'};

    print $hash{'data1'}->{'data2'}->{'data3'},"\n";
    print $hash_backup{'data1'}->{'data2'}->{'data3'},"\n";
    print "================================\n";
}

结果,

one
one
-------------------------------


================================


-------------------------------


================================


-------------------------------


================================

如果更改删除代码,则可以正常工作。

delete $hash_backup{'data1'};

结果,

one
one
-------------------------------
one

================================
one
one
-------------------------------
one

================================
one
one
-------------------------------
one

================================

我认为这是一个哈希引用问题。

如何保留原始哈希值并删除备份哈希值?

最佳答案

您需要深层复制克隆来复制整个哈希,而不仅仅是第一级元素。

看这里:

What's the best way to deep copy a hash of hashes in Perl?

关于perl - Perl 中的哈希复制和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42831162/

相关文章:

.net - 散列Unicode密码

java - 查找所有散列到相同散列值的 n 个键

c - 如何将数组转换为散列?

perl - 如何在 perl 中测试异常类型?

perl - 有没有办法在使用严格时从 Perl 中的字符串/变量创建变量?

perl - 如何在 Perl 文件的顶部和底部添加行?

perl - 如何拆分一条线并重新排列其元素?

cryptography - 是否有可能获得相同的 SHA1 哈希值?

Python Regex Sub - 在替换中使用匹配作为字典键

linux - Bash 内置哈希和命令搜索