Я пытаюсь найти комментарий # VERSION
в исходном файле perl. Затем я хочу вставить версию перед комментарием (или вместо нее не имеет значения). Может ли кто-нибудь сказать мне правильный способ сделать это с помощью PPI?Как найти комментарий к PPI, а затем вставить код перед ним?
перед тем
use strict;
use warnings;
package My::Package;
# VERSION
...
после
use strict;
use warnings;
package My::Package;
our $VERSION = 0.1;# VERSION
...
поддержания # VERSION
в конечном итоге является необязательным
Я на самом деле есть несколько идей о том, как найти # VERSION, но один является regex сериализованного ppi doc, который не кажется правильным, а другой использует find_first в комментарии, но если это не первый, я не уверен, что делать.
Обновленный код Это похоже на правильное решение, поскольку оно рассматривает только комментарии. но я не уверен, как использовать или действительно как создать новую переменную.
#!/usr/bin/env perl
use 5.012;
use strict;
use warnings;
use PPI;
my $ppi = PPI::Document->new('test.pm');
my $comments = $ppi->find('PPI::Token::Comment');
my $version = PPI::Statement::Variable->new;
foreach (@{$comments}) {
if (/^\s*#\s+VERSION\b$/) {
$_->replace($version);
}
}
UPDATE
Ответ на этот вопрос стал основой для DZP::OurPkgVersion
Можете ли вы привести пример до и после? –
пример добавлен в вопрос. – xenoterracide
Похож на новый плагин D :: Z в создании, а? В этом разговоре есть материал PPI в контексте Perl :: Critic: http://renee-baecker.de/talks/FrOSCon2009_PerlCritic.pdf – daxim