我有一个yaml对象
$VAR1 = bless( [
{
'Cluster2' => {
'source_mount' => '/mnt/uploads',
'destination_mount' => '/var/pub',
'default' => 'no',
'dir' => '/a /d /e'
},
'Cluster1' => {
'source_mount' => '/mnt/uploads',
'destination_mount' => '/var/pub',
'default' => 'yes',
'dir' => '/b /c'
}
}
], 'YAML::Tiny' );
我特意想在Cluster1下获取密钥目录的值。 我从像
这样的环境变量中获取Cluster1my $cluster=$ENV{SHARD}; #returns Cluster1
并尝试将dir作为
进行检索print values %{$yaml->[0]->{Cluster1}{'dir'}};
但它说
Can't use string ("/b /c") as a HASH ref while "strict refs" in use
如果我尝试
print values %{$yaml->[0]->{Cluster1}};
返回
/mnt/uploads/var/pubyes/b /c
我在做什么呢?
感谢。
答案 0 :(得分:2)
解释here。
$yaml->[0]->{Cluster1}{dir};
就是你想要的。
答案 1 :(得分:1)
$yaml->[0]->{Cluster1}{'dir'};
是一个简单的字符串,您可以像这样获得值。
您收到的错误只是说perl无法将字符串转换为哈希值 - %{ ... }
包装器将您的变量从哈希引用转换为哈希值,但是您有一个字符串,而不是hashref ,因此错误