Почему это не по объему? Почему используется строгая блокировка этого?
Язык Perl.
#!/usr/bin/perl
use strict;
[...]
while ( my $res = $async->wait_for_next_response )
{
[...]
if ($res->is_success)
{
[...]
my @relAuthorList = ($res->content =~ /<a +rel=\"author\" +href=\".*?\".*?>.*?<\/a>/gi);
if (@relAuthorList)
{
if ($#relAuthorlList != 0) # Line 87
{
[...]
}
[...]
}
my @metaAuthorList = ($res->content =~ /<meta +name=\"author\" +content=\".*?\" *?>/gi);
if (@metaAuthorList)
{
if ($#metaAuthorlList != 0) # Line 105
{
[...]
}
[...]
}
[...]
}
[...]
}
Когда я запускаю его, я получаю следующие ошибки:
$ ./findAuthorCanonical
Global symbol "@relAuthorlList" requires explicit package name at ./findAuthorCanonical line 87.
Global symbol "@metaAuthorlList" requires explicit package name at ./findAuthorCanonical line 105.
Execution of ./findAuthorCanonical aborted due to compilation errors.
$
Я в тупике. Строгий включен. Я использую my
ключевое слово для объявления переменных массива. Я возвращаю результаты из =~
оператор как списки в массивы. Я проверяю массивы, чтобы убедиться, что в них есть элементы, прежде чем пытаться получить последний индекс, используя $#array
как указано в perldata.
Когда я выключаю строго, все работает как положено.
Я пытался предварительно определить их как массивы, прежде чем помещать в них какое-либо содержимое:
my @relAuthorList = [];
my @metaAuthorList = [];
Это тоже не сработало.
Большинство ответов на этот вопрос связаны с ошибками, но я не вижу ни одного, что я сделал здесь. Некоторые включают забыть объявить переменную с my
но я сделал это Я видел один, который включает несоответствие типов, пытаясь рассматривать скаляр как массив. Я не мог найти ничего подходящего для этого.
Поэтому я спрашиваю: что я здесь не так делаю?
1 ответ
Строго здесь работал. Объявление двух массивов пишется иначе, чем их написание в строках 87 и 105.
Кроме того, ваши проверки для массивов != 0
позволит пустой массив (== -1
). Если вы проверяете более 1 элемента, тест будет >=1
если я понимаю ваше намерение здесь. Может быть, вы имели в виду @relAuthorList != 0
(в котором говорится, что количество предметов равно 1 или более).