你真的不想在这里切片;那些同时检索多个值。您正在访问哈希的单个元素以获取单个值,因此通常的单元素访问是您想要的:
my $value = $MyHash{'a'};
该值恰好是另一个哈希引用。我只是把它作为参考,然后继续生活。但是,作为参考,你有一个浅拷贝。修改 in 中的哈希$value
会修改 中的该值%MyHash
。
您可以取消引用它并将其分配给新的哈希。这也是一个浅拷贝,但仅适用于现在的值(如果有第二级嵌套):
my %NewHash = %$value;
这与您使用的语法相同,但由于我使用了一个简单的标量,因此省略了大括号:
my %NewHash = %{ ...some hash ref... };
我更喜欢后缀取消引用:
use v5.26;
my %NewHash = $value->%*;
如果您想要一个完全断开的副本,Storable可以为您做到这一点:
use Storable qw(dclone);
my $deep_copy = dclone($value);
切片
您使用哈希切片来获取多个值。当他们说“哈希切片”时,这对大多数人来说意味着什么(因为这是几十年来哈希唯一的切片)。@
那里的意思是“多个值” :
my @values = @MyHash{ @keys };
但是,还有一个返回键和值的“键值”切片(类似于each
它的方式):
use v5.20;
my %hash = %MyHash{ @keys };
你不关心密钥a
,你只想要价值。这仍然是一个太深的层次:
$VAR1 = {
'a' => {
'a1' => 'v1',
'a2' => 'v2'
}
};