如何在Perl中实现数组?

Jas*_*n X 17 perl language-implementation data-structures

Perl数组是一种抽象数据类型.Perl数组的内部机制是什么?它是用动态数组还是链表实现的?由于数组元素具有随机访问权限,因此我假设一个动态的指针数组,或者对标量的引用是有意义的.但是,对于数组头部的移位和非移位操作,数组是否必须通过这些操作移动其所有元素?听起来对我来说效率低下.任何想法?

phi*_*mue 23

看看这个:http://www.perlmonks.org/?node_id = 17890

(从那里取:)

Perl使用数组和第一个/最后一个元素偏移实现列表.数组的分配大于所需的偏移量,最初指向数组中间的偏移量,因此在重新分配底层数组之前,在两个方向(未移位和推送/插入)都有增长的空间.这种实现的结果是所有perl的原始列表操作符(插入,获取,确定数组大小,推送,弹出,移位,非移位等)在O(1)时间内执行.


Jon*_*ler 6

这些类型记录在perlguts中(参见Perl Internals的相关文档) - 并且是阵列的AV和散列的HV.