2014-01-29 1 views
1

У меня есть объект YAMLPerl 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 

и попытаться retrive реж, как

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

Я нашел решение, но не уверен, что это лучший способ. 'мой% host_conf =% {$ YAML -> [0] -> {CLUSTER1}};' , а затем 'печать $ host_conf {реж};' дал мне то, что я хотел. Любое хорошее предложение приветствуется. – nohup

ответ

2

Обьясняется here.

$yaml->[0]->{Cluster1}{dir}; - это то, что вы хотите.

1

$yaml->[0]->{Cluster1}{'dir'}; - простая строка, вы можете получить значение именно так.

Ошибка, которую вы получаете, просто говорит, что perl не может преобразовать строку в хэш - обертка %{ ... } преобразует вашу переменную из хеш-ссылки в хэш, но у вас есть строка, а не hashref, error

Смежные вопросы