如何制作Perl哈希引用的浅表副本?

Don*_*Don 11 perl hash shallow-copy

我想推送一个哈希的引用.我的意思是我想推送一个新哈希的引用,这是我给出的哈希的浅层副本.

如何创建浅拷贝?

bri*_*foy 31

只需复制它:

 my %copy = %$hash;
Run Code Online (Sandbox Code Playgroud)

如果您想要另一个引用,只需在匿名哈希构造函数中展开原始引用:

 my $copy = { %$hash };
Run Code Online (Sandbox Code Playgroud)

对于那些对浅拷贝感到疑惑的人:这种分配只为顶级键创建新值.任何引用的值仍将是新哈希中的相同引用.也就是说,您可以在不更改原始哈希的情况下替换新哈希中的值.如果仅更改值,例如将新项目推送到匿名数组值,则两个哈希值都会获得更改,因为它们共享相同的引用.因此,浅拷贝通常不是你想要的.