Полный пересмотр моего ответа. Глядя на то, что у вас есть в коде, я вижу некоторые странные вещи.
my @arr = [1..5000000];
Здесь вы присваиваете анонимную ссылку на массив $arr[0]
. Этот массив содержит только одно значение: ссылка на массив. Скрытый анонимный массив содержит 5 миллионов номеров.
for($i=0; $i<5000000; $i++) {
$arr[$i] = $i;
if($i % 1000000 == 0) {
print "$i\n";
}
}
Здесь вы заполняете массив 5 миллионами последовательных чисел, перезаписывая ссылку на массив в объявлении.
Гораздо более короткий способ сделать это:
my @arr = (1 .. 5_000_000);
Возможно, это сэкономит вам память.