5

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 の私のサブの 1 つが 'sub vN...' と呼ばれる場合、N は数値、fe:

sub v1foo {}

また

sub v3bar {}

または単に

sub v2 {}

PPI::Document find は解析を中断するようで、既に見つかったサブルーチンのみを返します。したがって、Foo を変更すると:

package Foo;

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

1;

私のテストの結果は「1」になります(見つかったサブはfoo0とfoo1です)

v[0..9] のようなサブルーチン名を宣言することはどういうわけか禁止されていますか?

ご挨拶。

4

1 に答える 1

5

これは (未知の) バグです。

これは、「v-number」または「バージョン番号」の概念に関連しています。

v 番号は v1.2.3 のように見え、パーサーは PPI::Token::Number::Version オブジェクトに変換します。

あなたが見ている問題は、「v、数字、...」を見つけて、それをv-numberとして解析し、その後の文字で次のトークンを開始することです(これはすべきではありません)。

さらに、サブ v1 { } の場合、v1 はとにかく v-number ではなく、サブルーチン名「v1」として解析する必要があります。

この PPI バグ トラッカーをhttps://rt.cpan.org/Public/Dist/Display.html?Name=PPIで報告してください。

于 2012-01-30T11:45:16.207 に答える