В соответствии с этим вопросом и этот ответ списки реализуются как массивы:
Perl реализует списки с массивом и смещения первого/последнего элемента. массив выделяется больше, чем необходимо с смещениями, первоначально указывающими в середине массива, так что есть место для роста в обоих направлениях (unshifts и push/inserts) перед перераспределение базового массива необходимо. Следствием этого реализация заключается в том, что все примитивные операторы списка (вставка, выборка, определение размера массива, push, pop, shift, unshift и т.д.) выполнить в O (1) время.
Таким образом, вы ожидаете, что доступ к элементу с помощью числового смещения будет таким же быстрым, потому что они представляют собой массивы в реализации, которые обеспечивают очень быструю индексацию в постоянном времени. Однако в сноске в Learning Perl автор говорит
Индексирование в массивы не используется Сильные стороны Perls. Если вы используете поп, push и аналогичных операторов, которые избегают используя индексирование, ваш код будет как правило, быстрее, чем если вы используете многие индексы, а также избегая ошибки "по очереди", часто называемые ошибки "fencepost". Иногда, начиная программист Perl (желая посмотрите, как скорость Perls сравнивается с Cs) возьмет, скажем, алгоритм сортировки оптимизированный для C (с большим индексом массива операции), переписать его прямо в Perl (опять же, с многие операции с индексами) и удивляться, почему его так медленно. Ответ заключается в том, что использование скрипка Страдивари для ног не следует рассматривать как звук строительной техники.
Как это может быть правдой, когда список действительно представляет собой массив под капотом? Я знаю, что просто неосведомленно пытаться сравнить скорость Perl с C, но не индексировать список по смещению так же быстро, как pop или push или что-то еще? Они, кажется, противоречат друг другу.