Массив Perl представляет собой абстрактный тип данных. Каков внутренний механизм для массива Perl? Он реализован с помощью динамического массива или связанного списка? Поскольку элементы массива имеют произвольный доступ, я бы предположил динамический массив указателей, или ссылки на скаляры имеют смысл. Тем не менее, при операции сдвига и смещения в начале массива массив должен будет перемещать все его элементы с помощью этих операций? звук неэффективен для меня. Любая мысль?Как реализованы массивы в Perl?
17
A
ответ
23
Посмотрите на это: http://www.perlmonks.org/?node_id=17890
(взятый оттуда :)
Perl реализует списки с массивом и первые/последние смещения элементов. Массив распределяется больше, чем необходимо, с смещениями, первоначально указывающими в середине массива, поэтому есть место для роста в обоих направлениях (unshifts и push/inserts) до того, как потребуется перераспределение базового массива. Следствием этой реализации является то, что все операторы примитивного списка perl (вставка, выборка, определение размера массива, push, pop, shift, unshift и т. Д.) Выполняются в O (1) раз.
6
Типы задокументированы в perlguts (см. Perl Internals для соответствующей документации) - и являются AV для массивов и HV для хешей.
Спасибо за ссылку. Это отвечает на мой вопрос. –