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.