2012-02-29 78 views
14

即使我声明了我的正则表达式变量,我仍然收到此错误。在模式匹配中使用未初始化的值(m //)

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

在我的代码后来我用那么$pattern

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

但是当我运行我的代码,它给了我下面的错误,并继续成功地运行:

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

此错误搜索谷歌似乎指向场景中的变量不是哪里已经初始化了,虽然在我的情况下,似乎我已经初始化了它?

+0

你能告诉我们更多的代码? $ page'和'$ element'在哪里定义?我怀疑可变范围问题。 – Toto 2012-02-29 09:04:08

回答

19

该消息不告诉你$pattern是未初始化的;它告诉你,$page是未初始化的。如果你期待的是$page可能未初始化,这是很正常的,那么你就可以忽略警告,并把事情说清楚了源代码的未来读者,写这样的:

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

好吧我已经更新了原始问题中的代码。所以在这种情况下'$ page'和'$ element'都已经用'my $ page'和'my $ element'初始化了。但我仍然得到未初始化的错误? – kurotsuki 2012-02-29 04:05:26

+0

只是另一个说明,我初始化了$ page和$ element的默认空白值,即“” – kurotsuki 2012-02-29 04:23:49

+1

'my $ page'不初始化*'$ page',它只是*声明*它。 'my $ page;'相当于'my $ page = undef;',并且*不等于'my $ page ='';'。在if语句之前,如果添加语句if(defined $ page){print“\ $ page is initialized \ n”;}; } else {print“\ $ page is uninitialized \ n”;} '',它打印什么? – ruakh 2012-02-29 13:38:03

1

问题ISN”牛逼$pattern - 问题是$element

快速测试将产生同样的结果:

use strict; 
use warnings; 

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