Как я могу улучшить Perl-код, сгенерированный Perl?

StackOverflow https://stackoverflow.com/questions/806727

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть тестовый генератор, написанный на Perl.Он генерирует тесты, которые подключаются к симулятору.Эти тесты сами написаны на Perl и подключаются к симулятору через его API.Я хотел бы, чтобы сгенерированный код был удобочитаемым для человека, что означает, что я хотел бы, чтобы он имел правильные отступы и форматировался.Есть ли хороший способ сделать это?

Подробности следуют ниже, или вы можете перейти к самому вопросу ниже.

Это пример:


my $basic =  ABC
        TRIGGER        => DELAY(
            NUM            => 500,
            ),
        )
BASIC

my $additional =  STATE_IS(
        STATE          => DEF,
        INDEX          => 0,
        ),

ADDITIONAL

Я хотел бы получить команду ABC будет выполнено с задержкой в 500 (единицы измерения сейчас не актуальны) после того, как я вызову &event, и состояние индекса 0 равно DEF.Иногда мне также хочется дождаться показателей 1, 2, 3 и т.д...

Только для одного индекса я хотел бы видеть это в своем тесте:


    &event(
        CMD            => ABC
        TRIGGER        => DELAY(
            NUM            => 500,
            TRIGGER        => STATE_IS(
                STATE          => DEF,
                INDEX          => 0,
                ),
            ),
        )

По двум причинам, которые я хотел бы увидеть:


    &event(
        CMD            => ABC
        TRIGGER        => DELAY(
            NUM            => 500,
            TRIGGER        => STATE_IS(
                STATE          => DEF,
                INDEX          => 0,
                TRIGGER        => STATE_IS(
                    STATE          => DEF,
                    INDEX          => 1,
                    ),
                ),
            ),
        )

Итак, по сути, я добавляю блок:


            TRIGGER        => STATE_IS(
                STATE          => DEF,
                INDEX          => 0,
                ),

для каждого индекса меняется и номер индекса.

Вот как я это делаю:


for $i (0..$num_indeces) {
    # update the index number
    $additional =~ s/(INDEX\s*=>\s*)\d+,/$1 $i,/;

    $basic =~ s/(
                (\),\s*)  # capture sequences of ),
                +         # as many as possible 
                \)\s*     # end with ) without a , 
}               )/$additional $1/sx; # replace with the additional data

Вот в чем собственно вопрос

Проблема здесь в том, что код получается с плохими отступами.Я бы хотел запустить результирующий $basic с помощью такого средства для приукрашивания, как это:

&prettify($basic, "perl");

Который бы красиво отформатировал его в соответствии с лучшими практиками Perl.Есть ли какой-нибудь хороший способ сделать это?

Это было полезно?

Решение

Я использовал это:

use Perl::Tidy;
sub Format {
    my $source = shift;
    my $result;
    Perl::Tidy::perltidy(
        source      => \$source,
        destination => \$result,
        argv        => [qw(-pbp -nst)]
    );
    return $result;
}

Другие советы

Дерзкий делает ваш код не только аккуратным, но и действительно красивым.Вы можете легко настроить его в соответствии с вашими местными стандартами кодирования.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top