我有一个用 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,
),
),
)
对于两个indeces,我想看看:
&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 的最佳实践很好地格式化它。有什么好的方法可以做到这一点吗?