Как получить доступ к элементам в этой структуре данных?

#perl #perl-data-structures

#perl #perl-data-structures

Вопрос:

У меня есть переменная с именем $ 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 .

Комментарии:

1. Ваш желаемый хэш «назначения» имеет один ключ, и значение этого ключа равно undef . Вы хотите (parens), а не {curlies}

Ответ №1:

$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. Спасибо eugene y за быстрый ответ. Предстоящие выходные будут моими выходными «грокни ссылки или умри» 🙂

2. perlreftut имеет отличное мягкое введение: perldoc.perl.org/perlreftut.html

Ответ №2:

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