Forum Webscript.Ru

Программирование => Perl => Тема начата: kosm от 09 Сентября 2003, 18:14:37

Название: Массив хешей
Отправлено: kosm от 09 Сентября 2003, 18:14:37
Ребят, подскажите что не так делаю?
Задача положить в массив хеши, и потом соответственно их отсель вытащить.
Кладу так:
push (@Log, %data);
Вытаскиваю так:
%data = $Log[$i];

Что я не так делаю?
Название: Массив хешей
Отправлено: ondr от 09 Сентября 2003, 18:30:49
push @log, \\%data;
...
%data = %{$log[$i]};

а лучше так:

push @log, {%data};
...
%data = %{$log[$i]};
Название: Массив хешей
Отправлено: ondr от 09 Сентября 2003, 18:33:20
а можно и вытаскивать только нужные данные по ключам:
$val = $log[$i]->{$key};

где: $key - ключ, $val - значение
Название: Массив хешей
Отправлено: Phoinix от 09 Сентября 2003, 18:48:29
kosm
Если ты хочешь, что бы в каждой ячейке массива был свой массив, то так не получится, все ячейки массива %data, становятся отдельными ячейками массива @log, и соответсвенно когда ты выбираешь одну ячейку @log ты получаешь одну ячейку %data

если уж так надо, то:

$mass = join(\'|\',%data);
push (@Log, $mass);

%data = split(/\\|/,$Log[$i]);

т.е. массив преобразуешь в скаляр, а потом обратно
Название: Массив хешей
Отправлено: mike от 09 Сентября 2003, 18:49:10
kosm
Чтобы лучше понять, как что делается, почитай
perldoc perllol
perldoc perlref
Название: Массив хешей
Отправлено: ondr от 09 Сентября 2003, 19:11:55
Цитировать
Phoinix:
если уж так надо, то:

$mass = join(\'|\',%data);
push (@Log, $mass);

%data = split(/\\|/,$Log[$i]);

т.е. массив преобразуешь в скаляр, а потом обратно


интересно, что будет если вдруг в хэше %data уже есть символы \'|\' ? :)
Название: Массив хешей
Отправлено: Phoinix от 09 Сентября 2003, 19:13:09
ondr
символ \'|\' - для примера
Название: Массив хешей
Отправлено: kosm от 09 Сентября 2003, 19:19:18
Огромное всем спасибо! Теперь все понятно...

Phoinix
Ага, как раз надо было что бы в кажной ячейке массива был свой хеш.

СПАСИБО ЕЩЕ РАЗ ВСЕМ!!!