2012-02-29 13 views
14

Recibo este error aunque he declarado mi variable de expresión regular.Uso del valor no inicializado en coincidencia de patrón (m //)

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

Más adelante en mi código que utilizo a continuación $pattern.

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

Pero cuando ejecuto mi código que me da el error abajo, y sigue funcionando con éxito:

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

Una búsqueda en Google para este error parece apuntar a escenarios en los que la variable no tiene sido inicializado, aunque en mi caso parece que ya lo he inicializado?

+0

Podría mostrarnos más código? ¿Dónde se definen '$ page' y' $ element'? Sospecho que hay un problema de alcance variable. – Toto

Respuesta

19

Ese mensaje no le dice que $pattern no está inicializado; le está diciendo que $page no está inicializado. Si usted está esperando que $page podría no haberse inicializado, y eso está bien, entonces se puede pasar por alto la advertencia y hacer las cosas más claras para los futuros lectores del código fuente, escribiendo esto:

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

Ok, he actualizado el código en la pregunta original. En este caso, tanto '$ page' como' $ element' se inicializaron previamente con 'my $ page' y' my $ element'. Sin embargo, sigo teniendo el error no inicializado? – kurotsuki

+0

Solo otra nota, inicié $ página y $ elemento con valores en blanco predeterminados, es decir, "" – kurotsuki

+1

'mi $ página' no * inicializa *' $ página', simplemente * lo declara *. 'my $ page;' es equivalente a 'my $ page = undef;', y * no * es equivalente a 'my $ page = '';'. Justo antes de su declaración 'if', si agrega la instrucción' if (defined $ page) {print "\ $ page is initialized \ n"; } else {print "\ $ page no está inicializado \ n"; } ', ¿qué imprime? – ruakh

1

El problema ISN' t $pattern - el problema es $element

Una prueba rápida producirá el mismo resultado:

use strict; 
use warnings; 

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