2010-11-19 12 views
1

私は "$ module-> prune( 'PPI :: Token :: Whitespace');"を使用すると、 $ fileに結果を保存すると、保存されたコードの作業コードに簡単に戻ることができますか?私は "Perl :: Tidy"を試してみましたが、これでははるかに良く見えますが、idはすべて修正していません。PPI - prune PPI :: Token :: Whitespace - 質問

#!/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 $!; 

編集:

私はもはや私が最初の場所にいた私のコードを再構築することができています。プルーン空白で、私が何かを追加するポイントを見つけるために、代わりに

$a = $module->find(sub { 
    $_[1]->isa('PPI::Statement') and 
    $_[1]->schild(0)->content eq q(if) and 
    $_[1]->schild(1)->isa('PPI::Something') and 
    ... 
    ... 
}); 

のこの

$a = $module->find(sub { 
    $_[1]->isa('PPI::Statement') and 
    $_[1]->content eq q(if([email protected]){$have_Term_ReadKey=0;$have_Term_Size=1;eval'require "Term/Size.pm"';if([email protected]){$have_Term_Size=0;}}) 
}); 

のようなものを使用することができます有効。 しかし、再試行した後、私はそれがうまくいっていないと思います。

+0

コードの前後に、変更が必要な場所を含めていくつかの例を投稿することはできますか? –

答えて

5

いくつかの空白が重要であり、あなたがそれを削除した場合、一般的に、あなたはあなたのコードが壊れます:

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') }); 

を削除する -


それは(反例を考えることができないと思う)安全だろう2つのPPI::Token::Word要素の間の空白はではなく、「は安全です」というように)難しい問題のように聞こえます。