Perl YAML :: Tiny获取哈希到变量的哈希值

时间:2014-01-29 07:17:27

标签: perl hash yaml

我有一个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下获取密钥目录的值。 我从像

这样的环境变量中获取Cluster1
my $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

我在做什么呢?

感谢。

2 个答案:

答案 0 :(得分:2)

解释here

$yaml->[0]->{Cluster1}{dir};就是你想要的。

答案 1 :(得分:1)

$yaml->[0]->{Cluster1}{'dir'};是一个简单的字符串,您可以像这样获得值。

您收到的错误只是说perl无法将字符串转换为哈希值 - %{ ... }包装器将您的变量从哈希引用转换为哈希值,但是您有一个字符串,而不是hashref ,因此错误