Ключом к пониманию этой проблемы является то, что вы получаете дополнительный элемент в выходе. Это не слишком важно, что это за пункт.
В общем, первое, что вы хотели бы сделать, когда ваша контейнерная переменная больше (или меньше) в нем, чем вы ожидаете, - это посмотреть на ее содержимое. Data :: Dumper модуль поставляется с Perl и может довольно структуры данных печати для вас:
use Data::Dumper;
print Dumper(\@foo);
После того, как вы видите, что в вашем контейнере, вы можете начать работать в обратном направлении, чтобы выяснить, как он попал туда. В конце концов вы в конечном итоге заметили, что сразу после инициализации @foo у него уже есть один элемент, который вам не нужен.
Еще одна уловка, чтобы проверить количество элементов в списке:
print "There are " . @array . " elements in \@array\n";
Если вы получаете номер, который вы не ожидаете, работать в обратном направлении, чтобы выяснить, когда дополнительный элемент появился.