Как я могу улучшить Perl-код, сгенерированный Perl?
-
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;
}
Другие советы
Дерзкий делает ваш код не только аккуратным, но и действительно красивым.Вы можете легко настроить его в соответствии с вашими местными стандартами кодирования.