我在perl中编写此代码,我在其中创建一个唯一键,然后为其赋值。
sub populate {
my $file = shift;
my %HoH = shift;
open(INFILE,$file);
.
.
.
$final_name = $prepend.$five;
$HoH{$final_name} = $seven;
}
现在我将两个参数传递给一个id为
的子程序&populate(\%abc,$file_1);
&populate(\%xyz,$file_2);
为什么它会给我一个这样的错误:
Reference found where even-sized list expected
答案 0 :(得分:11)
因为您的哈希被分配给引用,而不是哈希(偶数大小的列表)。你需要这样做:
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;
}