Ссылка найдена там, где ожидается четный список - PullRequest
2 голосов
/ 08 августа 2011

Я пишу этот код на Perl, где я создаю уникальный ключ, а затем присваиваю ему значение.

  sub populate {
      my $file = shift;
      my %HoH = shift;

      open(INFILE,$file);
      .
      .
      .  
      $final_name = $prepend.$five;
      $HoH{$final_name} = $seven;
 }

Теперь я передаю в подпрограмму два параметра с идентификатором типа

&populate(\%abc,$file_1);
&populate(\%xyz,$file_2);

Почему это выдает мне такую ​​ошибку:

Reference found where even-sized list expected

1 Ответ

11 голосов
/ 08 августа 2011

Потому что ваш хеш присваивается ссылке, а не хешу (список четного размера).Вам нужно сделать:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...