Использование неинициализированного значения в соответствии с шаблоном (m//)

Я получаю эту ошибку, даже если объявляю переменную regex.

my $pattern = '(Cat\.\sNo\.\s\d+)';

Позже в моем коде я использую $pattern.

if ($page =~ /$pattern/)
{
  push(@array, $element);
}

Но когда я запускаю свой код, он дает мне следующую ошибку и продолжает успешно работать:

Use of uninitialized value in pattern match (m//)

Поиск в Google для этой ошибки, похоже, указывает на сценарии, в которых переменная не была инициализирована, хотя в моем случае, похоже, я уже инициализировал ее?

Ответы

Ответ 1

Это сообщение не сообщает вам, что $pattern неинициализирован; он говорит вам, что $page неинициализирован. Если вы ожидаете, что $page может быть неинициализирован и что O.K., то вы можете обойти это предупреждение и разъяснить будущим читателям исходного кода, написав это:

if (defined($page) && ($page =~ /$pattern/))

Ответ 2

Проблема не $pattern - проблема $element

Быстрый тест даст тот же результат:

use strict;
use warnings;

my $pattern = '(Cat\.\sNo\.\s\d+)';
my $element =~ /$pattern/;