2012-01-30 9 views
5

Ho alcuni problemi con modulo PPI:PPI :: Errore del documento o un nome di subroutine speciale?

assumere ho Foo.pm:

package Foo; 

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

1; 

e voglio utilizzare PPI per ottenere tutti i sub:

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

come risultato i ha '3' che è corretto.

, ma quando uno dei miei sottotitoli nella Foo.pm si chiama 'sub vN ...', dove N è un numero, fe:

sub v1foo {} 

o

sub v3bar {} 

o semplicemente

sub v2 {} 

PPI :: Il documento trovato sembra interrompere l'analisi e restituisce solo i sottotitoli già trovati. Quindi, se modifico Foo:

package Foo; 

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

1; 

risultato del mio test sarebbe "1" (trovate riserve sono foo0 e foo1)

sta dichiarando subroutine nomi come v [0..9] in qualche modo proibito?

Saluti.

+1

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

risposta

5

Questo è un bug (sconosciuto).

È correlato al concetto di "numeri v" o "numeri di versione".

Un numero v assomiglia a v1.2.3 e parser in un oggetto PPI :: Token :: Numero :: Versione.

Il problema che si sta verificando è l'analisi dei caratteri "v, digit, ...", analizzandoli come numero v e quindi avviando il token successivo sul carattere successivo (che non dovrebbe fare).

Inoltre, nel caso sub v1 {} il v1 deve essere analizzato come il nome di subroutine "v1" invece di un numero v in ogni caso.

è necessario segnalare questa PPI bug tracker a https://rt.cpan.org/Public/Dist/Display.html?Name=PPI

+1

Grazie per la risposta. Il rapporto è inviato. – Robert

Problemi correlati