У меня есть тестовый генератор, написанный на 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. Есть ли хороший способ сделать это?