2012-02-29 16 views
14

正規表現変数を宣言してもこのエラーが発生します。パターンマッチでの初期化されていない値の使用(m //)

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

後の私のコードでは、私が$patternその後、使用しています。

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

しかし、私は自分のコードを実行すると、それは私に、以下のエラーを与え、正常に実行し続け:

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

このエラーのためにGoogleで検索は変数がない持っているシナリオを指すように思えます私の場合は既に初期化されているようですが、初期化されていますか?

+0

あなたは私たちに多くのコードを示してもらえますか? '$ page'と' $ element'はどこに定義されていますか?私は、可変範囲の問題を疑う。 – Toto

答えて

19

$patternが初期化されていないというメッセージは表示されません。それは$pageが初期化されていないことを伝えています。あなたは$pageが初期化されていないかもしれないが、それはOKですが、その後、あなたは警告をバイパスすることができ、これを書き込むことによって、ソースコードの将来の読者のために、物事を明確にすることを期待している場合:

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

元の質問のコードを更新しました。この場合、 '$ page'と' $ element'の両方は 'my $ page'と' my $ element'で既に初期化されています。まだ初期化されていないエラーが表示されますか? – kurotsuki

+0

もう1つの注意点として、デフォルトの空白値で$ pageと$ elementを初期化しました。つまり、 " – kurotsuki

+1

' my $ page'は* $ pageを初期化しません。*単に*宣言します。 'my $ page;'は 'my $ page = undef;'と等価であり、 'my $ page = '';と等価ではありません。 'if'文の直前に' if(defined $ page){print "\ $ pageが初期化された文を追加すると\ n"; } else {print "\ $ページは初期化されていません\ n"; } '、それは何を印刷しますか? – ruakh

1

問題は」にISNトン$pattern - 問題は、簡単なテストでは、同じ結果を$element

が生成されますされています

use strict; 
use warnings; 

my $pattern = '(Cat\.\sNo\.\s\d+)'; 
my $element =~ /$pattern/; 
関連する問題