Perl PPI-prune PPI::Token::Whitespace-question
当我使用“$module->prune('PPI::Token::Whitespace');”并将结果保存在$file中时,是否有一种简单的方法可以返回到已保存代码的工作代码?我尝试了“Perl::Tidy”,之后看起来好多了,但id并不能解决所有问题Perl PPI-prune PPI::Token::Whitespace-question,perl,perl-tidy,Perl,Perl Tidy,当我使用“$module->prune('PPI::Token::Whitespace');”并将结果保存在$file中时,是否有一种简单的方法可以返回到已保存代码的工作代码?我尝试了“Perl::Tidy”,之后看起来好多了,但id并不能解决所有问题 #!/usr/bin/env perl use warnings; use 5.012; use PPI; my $file = 'my_file.pm'; my $module = PPI::Document->new( $file )
#!/usr/bin/env perl
use warnings;
use 5.012;
use PPI;
my $file = 'my_file.pm';
my $module = PPI::Document->new( $file );
$module->prune( 'PPI::Token::Pod' );
$module->prune( 'PPI::Token::Comment' );
$module->prune( 'PPI::Token::Whitespace' );
# ...
# ...
$module->save( $file ) or die $!;
编辑:
我不再能够重建我最初拥有的代码。启用了prune空白后,我可以使用这样的内容
$a = $module->find( sub {
$_[1]->isa('PPI::Statement') and
$_[1]->content eq q(if($@){$have_Term_ReadKey=0;$have_Term_Size=1;eval'require "Term/Size.pm"';if($@){$have_Term_Size=0;}})
});
而不是
$a = $module->find( sub {
$_[1]->isa('PPI::Statement') and
$_[1]->schild(0)->content eq q(if) and
$_[1]->schild(1)->isa('PPI::Something') and
...
...
});
找到一个附加点。
但是,在重试之后,我认为它无法工作(除此之外,我无法在没有空格的情况下还原代码)。某些空格很重要,通常,如果删除它,您会破坏代码:
use PPI;
$document = PPI::Document->new(\'sub sq{$_[0]**2}');
$document->prune('PPI::Token::Whitespace');
print $document->serialize;
该程序的输出为:
subsq{$_[0]**2}
哎呀。对此,Perl::Tidy
无能为力
删除顶级空白是安全的(我认为——想不出反例)
# just prune top-level whitespace
$document->prune( sub { $_[1]->parent->isa('PPI::Document')
and $_[1]->isa('PPI::Token::Whitespace') } );
但是,枚举所有其他规则(如“两个
PPI::Token::Word
元素之间的空格无法安全删除”)听起来像是一个难题。一些空格很重要,通常如果删除它,您会破坏代码:
use PPI;
$document = PPI::Document->new(\'sub sq{$_[0]**2}');
$document->prune('PPI::Token::Whitespace');
print $document->serialize;
该程序的输出为:
subsq{$_[0]**2}
哎呀。对此,Perl::Tidy
无能为力
删除顶级空白是安全的(我认为——想不出反例)
# just prune top-level whitespace
$document->prune( sub { $_[1]->parent->isa('PPI::Document')
and $_[1]->isa('PPI::Token::Whitespace') } );
但是,枚举所有其他规则(如“两个
PPI::Token::Word
元素之间的空格无法安全删除”)听起来像是一个难题。能否在代码之前和之后发布一些示例,包括您希望更改但未获得更改的位置?能否在代码之前和之后发布一些示例,包括您想要更改但未获得更改的位置?