Ошибка при попытке перебрать массив хэшей в Perl - PullRequest
1 голос
/ 15 июля 2011

Этот вопрос уже задавался пару раз, но, похоже, ни один из этих ответов не подходит для моей ситуации.

Мой код:

open(FILE, "<", $fileb) or die "File not openable: $!";
while (<FILE>) {
    $filebmeta[$line] = (data => $_, match => -1);
    $line++;
}
close(FILE);
$line = 0;


for my $hashref (@filebmeta) {
     print "$hashref->{data}\n";
}

, когда я запускаю этот код, он плюетout: 'Нельзя использовать строку ("-1") в качестве ссылки HASH, в то время как "строгие ссылки" используются в строке ./partc.pl 152.'

Есть идеи, почему это происходит?Кажется, я не могу правильно разыменовать хеш в цикле.

Ответы [ 3 ]

7 голосов
/ 15 июля 2011

Элементами массива должны быть hashrefs, поэтому в операторе присваивания необходимо использовать фигурные скобки:

$filebmeta[$line] = {data => $_, match => -1};

Ваш код назначает список массиву, поэтому он просто получает последний элемент всписок, который является -1.Таким образом ваше сообщение об ошибке.

4 голосов
/ 15 июля 2011

Ваше выражение (data => $_, match => -1) не создает хэш-ссылки, оно создает список.Вы, вероятно, имели в виду {data => $_, match => -1}

0 голосов
/ 15 июля 2011

Вы имеете в виду помимо всех неопределенных переменных в вашем коде?Читайте perlreftut и обратите внимание на синтаксис.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...