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