2012-02-29 13 views
14

Otrzymuję ten błąd, mimo że zadeklarowałem zmienną regex.Użycie niezainicjowanej wartości w dopasowaniu wzorca (m //)

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

Później w moim kodu używam wtedy $pattern.

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

Ale gdy uruchamiam mój kod daje mi poniższy błąd i nadal działa skutecznie:

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

Przeszukanie w Google tego błędu wydaje się wskazywać na scenariuszach, w których zmienna nie ma został zainicjowany, chociaż w moim przypadku wydawałoby się, że już go zainicjowałem?

+0

można pokazać nam więcej kodu? Gdzie zdefiniowano '$ page' i' $ element'? Podejrzewam problem z zakresem zmiennym. – Toto

Odpowiedz

19

Ta wiadomość nie mówi, że $pattern jest niezainicjalizowany; Mówi ci, że $page jest niezainicjowany. Jeśli spodziewasz się, że $page może być niezainicjowanymi, i to jest OK, to można pominąć ostrzeżenie i było jasne dla przyszłych czytelników kodu źródłowego, pisząc to:

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

OK Zaktualizowałem kod w oryginalnym pytaniu. W tym przypadku zarówno '$ page' i' $ element' zostały wcześniej zainicjalizowane za pomocą 'my $ page' oraz' my $ element'. Nadal dostaję niezainicjowany błąd? – kurotsuki

+0

Jeszcze jedna uwaga, zainicjowałem $ page i $ element z domyślnymi wartościami pustymi, tj. "" – kurotsuki

+1

'my $ page' nie * inicjalizuje *' $ page', to po prostu * deklaruje * to. 'my $ page;' jest równoważne 'my $ page = undef;' i jest * nie * równoważne 'my $ page = '';'. Tuż przed twoim poleceniem "if", jeśli dodasz instrukcję 'if (zdefiniowana $ strona) {print" \ $ strona jest zainicjalizowana \ n "; } else {print "\ $ strona jest niezainicjalizowana \ n"; } ', co to jest drukowane? – ruakh

1

problem nieprawdaż t $pattern - problem jest $element

szybki test będzie produkować ten sam wynik:

use strict; 
use warnings; 

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