2012-09-10 3 views
7

el siguiente código:¿Por qué esta expresión regular con un carácter unicode de 2 bytes emite una advertencia "no inicializada" para el valor l en coincidencia?

#!/usr/bin/env perl 
use utf8; 
use strict; 
use warnings; 
use 5.012; # implicitly turn on feature unicode_strings 
my $test = "some string"; 
$test =~ m/.+\x{2013}/x; 

Rendimiento:

Uso del valor no inicializado $test en coincidencia con el patrón (m//) en la línea test.pl 9.

esto parece ocurrir con cualquier 2 -byte carácter dentro de \x{}. Las siguientes expresiones regulares funcionan bien:

/a+\x{2013}/ 
/.*\x{2013}/ 
/.+\x{20}/ 

Además, el error desaparece con use bytes, pero utilizando pragma que es discouraged. ¿Que está pasando aqui?

+0

Confirmado en Perl 5.16.1. Creo que deberías publicar esto como un informe de error de Perl en lugar de una pregunta de SO; todo lo que podemos hacer es filosófico :) – hobbs

+0

Espero vagamente que este sea mi error, pero tienes razón, parece que podría ser un error. Estoy probando en v5.14.2, por cierto. –

+0

Solución alternativa: agregue 'utf8 :: upgrade ($ test);' antes de la coincidencia. – ikegami

Respuesta

3

Es singular que deba hacer esta pregunta. Me parece relacionado con un error que me acaba de informar ayer

https://rt.perl.org/rt3/Ticket/Display.html?id=114808

donde este código también produce "Use of uninitialized value $_ in split ..." advertencias, y las causas split regresar inesperadamente una lista vacía:

use warnings; 
binmode *STDOUT, ":encoding(UTF-8)"; 
my $pattern = "\x{abc}\x{def}ghi"; 
for ("\x{444}", "norm\x{a0}l", "\x{445}", "ab\x{ccc}de\x{fff}gh") { 
    print "--------------------\ntext is $_, pattern is /$pattern/\n"; 

    # expect split to return ($_) , but when $pattern and $_ both 
    # have wide chars, it returns () 
    print 'split output is [', split /$pattern/, $_; 

    print "]\n"; 
} 
+0

esto debería ser probablemente un comentario – ant

+0

bien, parece que esto es un error, lo lanzaré en rt.perl.org, gracias! –

+0

@Arkady Kukarkin - presentado ayer: # 114808 – mob

5

Esto fue un error, y ahora se ha corregido en blead mediante confirmaciones 7e0d5ad7c9cdb21b681e611b888acd41d34c4d05 y c72077c4fff72b66cdde1621c62fb4fd383ce093. Esta reparación debería estar disponible en 5.17.5

Cuestiones relacionadas