在模式匹配中使用未初始化的值(m //)

时间:2012-02-29 03:43:39

标签: perl

即使我已声明我的正则表达式变量,我也收到此错误。

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

稍后在我的代码中,我使用了$pattern

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

但是当我运行我的代码时,它会给我以下错误,并继续成功运行:

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

在Google上搜索此错误似乎指向变量尚未初始化的情况,尽管在我的情况下,我似乎已经初始化了它?

2 个答案:

答案 0 :(得分:22)

该消息并未告诉您$pattern未初始化;它告诉你$page未初始化。如果你期望$page可能未被初始化,那就是O.K.,那么你可以绕过警告,并为未来的源代码读者清楚地写下这个:

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

答案 1 :(得分:1)

问题不是$pattern - 问题是$element

快速测试会产生相同的结果:

use strict;
use warnings;

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