2012-02-29 62 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/;