2012-01-30 5 views
5

tengo algunos problemas con el módulo PPI:PPI :: ¿Error del documento o algún nombre de subrutina especial?

asume que tengo Foo.pm:

package Foo; 

sub foo0 { 1; } 
sub foo1 { 1; } 
sub foo2 { 1; } 
sub foo3 { 1; } 

1; 

y quiero utilizar PPI para obtener todos los submarinos:

#!/usr/bin/env perl 
use PPI; 
my $filename = shift; 
my $Document = PPI::Document->new($filename); 
my $subs = $Document->find('PPI::Statement::Sub'); 
warn $#$subs; 

como resultado i tiene '3' que es correcto.

pero cuando uno de mis suscriptores en Foo.pm se llama 'sub vN ...', donde N es un número, Fe:

sub v1foo {} 

o

sub v3bar {} 

o simplemente

sub v2 {} 

PPI :: El documento encontrado parece interrumpir el análisis y devuelve solo los subs ya encontrados. Así que si modifico Foo:

package Foo; 

sub foo0 { 1; } 
sub foo1 { 1; } 
sub v2xx { 1; } 
sub foo3 { 1; } 

1; 

resultado de mi prueba sería "1" (submarinos que se encuentran son foo0 y foo1)

está declarando nombres como subrutinas v [0..9] alguna manera prohibidos?

Saludos.

+1

Consejo: http://p3rl.org/data#Version-Strings – daxim

Respuesta

5

Este es un error (desconocido).

Está relacionado con el concepto de "números v" o "números de versión".

Un número v se parece algo a v1.2.3 y analizadores en un objeto PPI :: Token :: Number :: Version.

El problema que está viendo es el análisis que detecta "v, digit, ...", lo analiza como un número v y luego inicia el próximo token en el carácter después de él (que no debería hacer).

Además, en el caso de sub v1 {} la v1 se debe analizar como el nombre de la subrutina "v1" en lugar de un número v de todos modos.

Avise este PPI seguimiento de errores en https://rt.cpan.org/Public/Dist/Display.html?Name=PPI

+1

Gracias por la respuesta. El informe se envía. – Robert

Cuestiones relacionadas