2012-02-29 22 views
14

Viene visualizzato questo errore anche se ho dichiarato la variabile regex.Uso del valore non inizializzato nella corrispondenza del modello (m //)

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

Più tardi nel mio codice che uso poi $pattern.

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

Ma quando ho eseguito il mio codice mi dà l'errore sotto, e continua a eseguire correttamente:

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

Una ricerca su Google per questo errore sembra indicare scenari in cui la variabile non ha stato inizializzato, sebbene nel mio caso sembrerebbe che l'ho già inizializzato?

+0

ci può mostrare più di codice? Dove sono definiti '$ page' e' $ element'? Sospetto un problema con l'ambito variabile. – Toto

risposta

19

Quel messaggio non ti sta dicendo che $pattern non è inizializzato; ti sta dicendo che $page non è inizializzato. Se ci si aspetta che $page potrebbe essere inizializzato, e va bene, allora è possibile ignorare l'avvertimento, e rendere le cose chiare per i futuri lettori del codice sorgente, scrivendo questo:

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

Ok ho aggiornato il codice nella domanda originale. Quindi in questo caso sia '$ page' che' $ element' sono stati precedentemente inizializzati con 'my $ page' e' my $ element'. Eppure ho ancora l'errore non inizializzato? – kurotsuki

+0

Solo un'altra nota, ho inizializzato $ page e $ element con valori vuoti predefiniti, ad esempio "" – kurotsuki

+1

'my $ page' non * inizializza *' $ page', semplicemente * dichiara * it. 'my $ page;' è equivalente a 'my $ page = undef;', ed è * non * equivalente a 'my $ page = '';'. Subito prima dell'istruzione 'if', se si aggiunge l'istruzione' if (defined $ page) {print "\ $ page è inizializzata \ n"; } else {stampa "\ $ page non è inizializzata \ n"; } ', cosa stampa? – ruakh

1

Il problema isn' t $pattern - il problema è $element

Un test rapido produrrà lo stesso risultato:

use strict; 
use warnings; 

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