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
& event
を呼び出した後、コマンド ABC
を500の遅延で実行したい(ユニットは今は関係ない)インデックス0の状態は DEF
です。場合によっては、1、2、3などのインデックスを待つこともあります。
1つのインデックスについてのみ、テストでこれを確認します:
&event(
CMD => ABC
TRIGGER => DELAY(
NUM => 500,
TRIGGER => STATE_IS(
STATE => DEF,
INDEX => 0,
),
),
)
2つの指標について、私は見たい:
&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;
}
他のヒント
PerlTidy は、コードを整頓するだけでなく、本当に美しくします。現地のコーディング標準に従って簡単に調整できます。
所属していません StackOverflow