Адреса памяти для анонимных массивов естественным образом используются perl. Как показывает этот пример, они переключаются между двумя адресами для пустых массивов:
$ perl -E "say [] for (1..6)"
ARRAY(0x37b23c)
ARRAY(0x37b28c)
ARRAY(0x37b23c)
ARRAY(0x37b28c)
ARRAY(0x37b23c)
ARRAY(0x37b28c)
Я выдвинул несколько теорий о том, почему он не мог перераспределить память сразу, когда обнаружил, что цикл не всегда состоит из двух адресов. Следующие примеры циклов 3 и 4.
$ perl -E "say [0] for (1..6)"
ARRAY(0x39b23c)
ARRAY(0x39b2ac)
ARRAY(0x39b28c)
ARRAY(0x39b23c)
ARRAY(0x39b2ac)
ARRAY(0x39b28c)
$ perl -E "say [0,0] for (1..6)"
ARRAY(0x64b23c)
ARRAY(0x64b2cc)
ARRAY(0x64b2ac)
ARRAY(0x64b28c)
ARRAY(0x64b23c)
ARRAY(0x64b2cc)
Чем обусловлена эта особенность управления памятью?