PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 164


Приведем пример:

use Tie RefHash, use 10 File,

tie %nane, Tie RefHash ,

foreach $filename ( /etc/termcap , /vnumx , /bin/cat ) {

$fh = 10 File->( < Sfilename ) or next,

$name{$fh} = Sfilename, }

print open files  , ]oin( , values %name  \n , foreach $file (keys %name) {

seek($file, 0, 2),   # Позиционирование в конец файла

pnntf ( %s is %d bytes long \n  $name{$file}, tell($file)) }

Однако вместо применения объекта в качестве ключа хэша обычно достаточно сохранить уникальный атрибут объекта (например, имя или идентификатор).

> Смотри также---------------------------------------------------------------------------------------------

Документация по стандартному модулю Tie::RefHash; раздел «Warning» perl-ref(l).

5.13. Предварительное выделение памяти для хэша

Проблема

Требуется заранее выделить память под хэш, чтобы ускорить работу програм­мы — в этом случае Perl не придется выделять новые блоки при каждом добавле­нии элемента. Окончательный размер хэша часто бывает известен в начале пост­роения, и эта информация пригодится для повышения быстродействия.


5.14. Поиск самых распространенных значений    171

Решение

Присвойте количество пар «ключ/значение» конструкции keys(%X3lll):

# Выделить в хэше %hash память для $num элементов
keys(%hash) = $num,

Комментарий

Новая возможность, впервые появившаяся в Perl версии 5.004, может положи­тельно повлиять на быстродействие вашей программы (хотя и не обязательно). В хэшах Perl и так применяются общие ключи, поэтому при наличии хэша с клю­чом 'Apple Perl уже не выделяет память под другую копию Apple при включе­нии этого ключа в другой хэш.

#  В %users резервируется место для 512 элементов
keys(%users)  = 512,

Внутренние структуры данных Perl требуют, чтобы количество ключей было равно степени 2. Если написать:

keys(%users) = 1000,

Perl выделит для хэша 1024 «гнезда». Количество ключей не всегда равно коли­честву гнезд. Совпадение обеспечивает оптимальное быстродействие, однако конкретное соответствие между ключами и гнездами зависит от ключей и внут­реннего алгоритма хэширования Perl.




- Начало -  - Назад -  - Вперед -