Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Что означает такая конструкция?


Автор: Валерия 11.9.2009, 02:37
Код

$ua = LWP::UserAgent->new();
$data = [
'a' => '1',
'b' => '2'
];

#Как с этой строки добавить к массиву $data значение допустим 'c' => '3'?

$content = $ua->post("http://127.0.0.1", $data)->as_string;


Смотрим комментарий кода.
$data{"c"} = '3' не помагает

Собственно что означает такая конструкция ['a' =>'b'] ?
Это ведь похоже и не ассоциативный массив...

Автор: gcc 11.9.2009, 04:19
может как-то так ?

$data[0]{"c"} = '3' 

Код


foreach (@{$data}) {

print $_->{a};

}

Автор: amg 11.9.2009, 05:45
Такая конструкция конструкция означает пудрение мозгов  smile 
Дело в том, что оператор => это (за мелкими исключениями) синоним запятой, применяется он почти всегда для хэшей, в итоге имеем намек на хэш, которого на самом деле нет.
$data -- это ссылка на анонимный массив, то же самое, что 
$data = ['a', '1', 'b', '2'];

Следовательно, вопрос "Как с этой строки добавить к массиву $data значение допустим 'c' => '3'?" не совсем корректен, можно сделать
push @$data, 'c' => '3'; # => -- синоним запятой
Тем самым в конец массива добавится два элемента, 'c' и '3'.
Либо 
push @$data, {'c' => '3'};
Тем самым в конец массива добавится один элемент, ссылка на анонимный хэш ('c' => '3').

Автор: chorny 14.9.2009, 01:16
Цитата(Валерия @  11.9.2009,  02:37 Найти цитируемый пост)
$ua = LWP::UserAgent->new();
$data = [
'a' => '1',
'b' => '2'
];
#Как с этой строки добавить к массиву $data значение допустим 'c' => '3'?


Первое с чего надо начинать - это добавить "use strict;use warnings;use diagnostics;". Сразу после первой строки c #!
Код


use strict;use warnings;use diagnostics;
my $ua = LWP::UserAgent->new();
my $data = { #если это ссылка на хэш, а не на массив
'a' => '1',
'b' => '2'
};
$data->{'c'}=3;



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)