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?
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
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. –
Solución alternativa: agregue 'utf8 :: upgrade ($ test);' antes de la coincidencia. – ikegami