Как получить доступ к элементам в этой структуре данных? - PullRequest
2 голосов
/ 04 октября 2011

У меня есть переменная с именем $ ip_data, и когда я делаю 'print $ ip_data;'это показывает что-то вроде этого: ARRAY (0x3c353cc4);

Data :: Dump дает мне следующую структуру:

[
 {
   ip => "127.0.0.1",
   list => [
     "France",
     "Safari",
   ],
 },
]

Я хотел бы извлечь ip (IP-адрес), country и browser и поместите его в хеш, который выглядит следующим образом:

%ip_info = (  ip       => '127.0.0.1',
              country  => 'France',
              browser  => 'Safari' );

До сих пор все мои попытки разыменовать его не увенчались успехом.Насколько я понимаю, $ ip_data - это массив, в котором есть хеш для элемента, и первый элемент этого хеша является строкой, а второй - это массив, содержащий два строковых элемента.

Я ошибаюсь?Если да, пожалуйста, скажите мне, что здесь происходит и как получить эти элементы в %ip_info.

Ответы [ 2 ]

3 голосов
/ 04 октября 2011

$ip_data - это ссылка на массив, содержащий один элемент (ссылка на хеш). Вы можете создать свой хэш так:

my %ip_info = (
    ip      => $ip_data->[0]{ip},
    country => $ip_data->[0]{list}[0],
    browser => $ip_data->[0]{list}[1],
);

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

1 голос
/ 04 октября 2011

eugene y ответ дает вам конкретный вариант использования. Чтобы узнать больше, прочитайте perldoc perlreftut, а для полной истории perldoc perlref

...