Как реализованы массивы в Perl?

Массив Perl представляет собой абстрактный тип данных. Каков внутренний механизм для массива Perl? Он реализован с помощью динамического массива или связанного списка? Поскольку элементы массива имеют произвольный доступ, я бы предположил динамический массив указателей, или ссылки на скаляры имеют смысл. Тем не менее, при операции сдвига и смещения в начале массива массив должен будет перемещать все его элементы с помощью этих операций? звук неэффективен для меня. Любая мысль?

Ответ 1

Посмотрите на это: http://www.perlmonks.org/?node_id=17890

(взято оттуда:)

Perl реализует списки с массивом и смещениями первого и последнего элементов. Массив распределяется больше, чем необходимо, с смещениями, первоначально указывающими в середине массива, поэтому есть место для роста в обоих направлениях (unshifts и push/inserts) до того, как потребуется перераспределение базового массива. Следствием этой реализации является то, что все операторы примитивного списка perl (вставка, выборка, определение размера массива, push, pop, shift, unshift и т.д.) Выполняются в O (1) раз.

Ответ 2

Типы документируются в perlguts (см. Perl Internals для соответствующей документации) - и являются AV для массивов и HV для хешей.