Perl обращается к хешу внутри хеша и перебирает каждый для извлечения значения - PullRequest
2 голосов
/ 26 августа 2011

Я пытаюсь получить доступ к хешу внутри хеша и перебрать его, чтобы получить значения.Вот пример данных

$VAR1 = {
      '24.40.53.143' => {
                          'ServStat' => {
                                          '1.18.118.115.95.99.119.98.98.112.109.45.97.112.95.104.116.116.112.115' => 'vs_cgggbpm-ap_https',
                                          '1.17.118.115.95.99.119.98.115.102.97.45.97.112.95.104.116.116.112' => 'vs_cddedsfa-ap_http',
                                          '20.18.118.115.95.99.119.98.116.119.98.45.98.112.95.104.116.116.112.115' => '0',
                                          '19.17.118.115.95.99.119.98.119.115.45.97.112.95.104.116.116.112.115' => '0',
                                          '2.18.118.115.95.99.119.98.116.119.98.45.98.112.95.104.116.116.112.115' => '0',
                                          '24.18.118.115.95.99.119.98.116.119.98.45.97.112.95.104.116.116.112.115' => '0',
                                          '17.17.118.115.95.99.119.98.119.98.45.97.112.95.104.116.116.112.115' => '0',
                                          '29.17.118.115.95.99.119.98.116.119.112.45.98.112.95.104.116.116.112' => '0',  

Я хотел бы пройти через 'ServStat' и извлечь каждое значение.Как бы я сослался на хеш 'ServStat', чтобы я мог делать foreach для содержимого?Примерно так:

foreach {ServStat} {
my ( $num, $char, $vs ) = (/(\d+)\.(\d+)\.(.+)/ );
if ($num == 1) { 
print {ServStat}->$value
}
}  

Заранее благодарю за любой совет, который вы можете предложить!

1 Ответ

2 голосов
/ 26 августа 2011

Чтобы получить ключи, вы можете использовать функцию keys в хэше.

my $data = {
      '24.40.53.143' => {
                          'ServStat' => {'1.18.118.115.95.99.119.98.98.112.109.45.97.112.95.104.116.116.112.115' => 'vs_cgggbpm-ap_https'}
      }
};


my $ServStat = $data->{24.40.53.143}{ServStat};

foreach my $key (keys %{$ServStat}) { # you need the {} to dereference as $ServStat is a hash reference
 ...#Now, in $key, you have the key 1.18.118.115.95.99.119.98.98.112.109.45.97.112.95.104.116.116.112.115

}  

Если вам нужны все значения, просто используйте функцию values ​​ в хэше

my @values = values %{$ServStat};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...