#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