Nat*_*man 6 perl code-formatting
我有一个用Perl编写的测试生成器.它生成连接到模拟器的测试.这些测试本身是用Perl编写的,并通过其API连接到模拟器.我希望生成的代码是人类可读的,这意味着我希望它能够正确缩进和格式化.有没有好办法呢?
详情如下,或者您可以跳到下面的实际问题.
这是一个例子:
my $basic = ABC
TRIGGER => DELAY(
NUM => 500,
),
)
BASIC
my $additional = STATE_IS(
STATE => DEF,
INDEX => 0,
),
ADDITIONAL
Run Code Online (Sandbox Code Playgroud)
我希望ABC在调用之后执行延迟为500 的命令(单位现在不相关)&event,并且索引0的状态为DEF.有时我也想等待第1,2,3等等......
对于一个索引我想在我的测试中看到这个:
&event(
CMD => ABC
TRIGGER => DELAY(
NUM => 500,
TRIGGER => STATE_IS(
STATE => DEF,
INDEX => 0,
),
),
)
Run Code Online (Sandbox Code Playgroud)
对于两个我想看的内容:
&event(
CMD => ABC
TRIGGER => DELAY(
NUM => 500,
TRIGGER => STATE_IS(
STATE => DEF,
INDEX => 0,
TRIGGER => STATE_IS(
STATE => DEF,
INDEX => 1,
),
),
),
)
Run Code Online (Sandbox Code Playgroud)
所以基本上我添加了一个块:
TRIGGER => STATE_IS(
STATE => DEF,
INDEX => 0,
),
Run Code Online (Sandbox Code Playgroud)
对于每个索引,索引号都会更改.
我是这样做的:
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
Run Code Online (Sandbox Code Playgroud)
这是实际的问题
这里的问题是代码输出很差.我想$basic通过这样的美化器运行结果:
&prettify($basic, "perl");
Run Code Online (Sandbox Code Playgroud)
根据Perl的最佳实践,它可以很好地格式化.有什么好办法吗?
Hyn*_*dil 10
我用过这个:
use Perl::Tidy;
sub Format {
my $source = shift;
my $result;
Perl::Tidy::perltidy(
source => \$source,
destination => \$result,
argv => [qw(-pbp -nst)]
);
return $result;
}
Run Code Online (Sandbox Code Playgroud)