| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Системное программирование > Передача подпрограмме хэша. |
| Автор: everyone 26.1.2005, 21:39 | ||||
Как в подпрограмме share найти value(b) хэша, передаваемого этой подпрограмме, зная ключ к этому значению(a)? Как я понял, подпрограмме передаётся список - "@_", то есть ключ и значение хэша становятся ячейками списка, никак между собой не связанными. И на всякий случай, скажу для какой цели это нужно: Подпрограмме передаётся хэш с параметрами, скажем, отображения HTML страницы, где любой ключ - название параметра, а соответствующее значение - значение параметра. Я пробовал передавать значения параметров списком, или скалярами, но они должны идти в определённом порядке,... утомительно. Что-то похожее я видел в CGI.pm:
функции header тоже передаётся соответсвие ключ=>ячейка, но не хочется лезть в исходники Есть у кого-нибудь решение моей проблемы? http://smilies.sofrayt.com/^/aiw/help.gif[s] |
| Автор: Chuck 26.1.2005, 22:10 | ||||
| Это можно сделать так: 1. Неявной передачей ссылки (использование прототипов):
2. Передачей хэша как массива с четным числом элементов:
|
| Автор: s_a_s_h_a 27.1.2005, 10:17 | ||
Другая запись использования ссылки:
|
| Автор: dimes 27.1.2005, 11:12 | ||
Э.... а почему не подходит такой способ?
|
| Автор: GoodBoy 27.1.2005, 15:38 | ||
| everyone Я обычно передачу делаю вот так:
|
| Автор: korob2001 27.1.2005, 22:19 | ||
| Если передаётся один хеш, то можно получить его и без ссылок простым присваиванием: Например:
Насчёт списка ты прав, хеш действительно сохраняется в массив в виде линейного списка, но он не смешивает ключи и значения. Другими словами, список будет примерно таким: ("key2", "val2", "key3", "val3", "key1", "val1") Здесь стоит обратить внимание на то, что в списке каждое значение стоит справа от своего ключа. Но сами пары расположены не по порядку, но в тоже время это не имеет никакого значения. Вобщем мы получаем точную копию хеша, причём если хеш объявлен как локальный, как в примере выше, то его можно назвать таким же именем как и передавемый подпрограмме. Проблема возникает только в том случае, если ты передаёшь в подрограмму не один хеш. Удачи. Добавлено @ 22:21 dimes - опс.... Извини, просто сначала не заметил того, что ты это уже написал . ;))))))))) |