Использование неинициализированного значения в сопоставлении с образцом (m //) - PullRequest
15 голосов
/ 29 февраля 2012

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

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

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

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

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

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

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

Ответы [ 2 ]

22 голосов
/ 29 февраля 2012

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

if (defined($page) && ($page =~ /$pattern/))
1 голос
/ 29 февраля 2012

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

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

use strict;
use warnings;

my $pattern = '(Cat\.\sNo\.\s\d+)';
my $element =~ /$pattern/;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...