passHashAndFile("test.txt", %hash);
должно быть
passHashAndFile("test.txt", \%hash);
Кроме того, у вас есть имена переменных с ошибками, вы присваиваете неверное значение, вы используете нелокализованные глобальные переменные и используете проблемный 2-аргумент open
. Кроме того, большинство людей имеют подпрограмму, возвращающую ссылку на хэш вместо ссылки на пустой хэш.
#!/usr/local/bin/perl5.8
use strict;
use warnings;
sub parse_file {
my ($qfn) = @_;
open(my $fh, '<', $qfn)
or die("Can't open file \"$qfn\": $!\n");
my %hash;
while (my $line = <$fh>) {
my ($key, $val) = split(/--/, $line);
$hash{$key} = $val;
}
return \%hash;
}
my $hash = parse_file("test.txt");
for my $key (keys %$hash) {
print "Key = $key, Value = $hash->{$key}\n";
}
Мы обычно исключаем наши ответы, но всегда используем use strict; use warnings;
. Он нашел бы хотя бы одну из проблем.