参考文献中找到了偶数大小的列表

时间:2011-08-08 16:56:07

标签: perl

我在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

1 个答案:

答案 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;
}