2012-01-30 32 views
5

我有一些問題與PPI模塊:PPI ::文件錯誤或一些特殊的子程序名稱?

假設我有Foo.pm:

package Foo; 

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

1; 

,我想用PPI來獲取所有潛艇:

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

的結果,我得到'3'這是正確的。

,但是當我在Foo.pm潛艇的一個被稱爲 '子VN ......',其中N是一個數字,FE:

sub v1foo {} 

sub v3bar {} 

或者乾脆

sub v2 {} 

PPI :: Document find似乎打破瞭解析並只返回已經找到的subs。 所以,如果我修改符:

package Foo; 

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

1; 

我測試的結果將是 「1」(發現潛艇是foo0和foo1)

正在申報子程序的名字與V同樣[0..9]不知何故被禁止?

問候。

+1

提示報告這個PPI的bug跟蹤系統:http://p3rl.org/data#Version-Strings – daxim 2012-01-30 11:41:24

回答

5

這是一個(未知的)錯誤。

它與「v-數字」或「版本號」的概念有關。

v數字看起來像v1.2.3和解析器到一個PPI :: Token :: Number :: Version對象。

您看到的問題是解析發現「v,digit,...」,將其解析爲v值,然後在後面的字符處開始下一個標記(它不應該這樣做)。

此外,在sub v1 {}的情況下,v1應該被解析爲子程序名稱「v1」而不是v號碼。

你應該https://rt.cpan.org/Public/Dist/Display.html?Name=PPI

+1

謝謝你的答案。報告已發送。 – Robert 2012-01-30 12:37:11