PPI - чернослив PPI:: Токен:: Пробелы - вопрос

Когда я использую "$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 );
$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]->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
    ...
    ...
});

чтобы найти точку, чтобы добавить что-то. Но знайте, после повторной попытки я думаю, что это не может работать (кроме того факта, что я не могу восстановить код без полей).

1 ответ

Решение

Некоторые пробелы являются значительными, и в целом вы нарушите свой код, если удалите его:

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 удаление элементов небезопасно ") звучит как сложная проблема.

Другие вопросы по тегам