Потому что ваш хеш присваивается ссылке, а не хешу (список четного размера).Вам нужно сделать:
my $hashref = shift;
...
$hashref->{$final_name} = $seven;
ETA: Вы должны вызывать подпрограммы без &
, например, populate(...)
, если только вы не хотите переопределить прототип подпрограммы.Если вы не знаете, что такое прототип, просто не используйте &
.
ETA2: вам действительно следует использовать лексический дескриптор файла и открыть три аргумента.Рассмотрим этот сценарий:
open INFILE, $file;
some_sub();
$args = <INFILE>; # <--- Now reading from a closed filehandle
sub some_sub {
open INFILE, $some_file;
random code...
close INFILE;
}