6

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なども待ちたいと思うでしょう...

テストでこれを確認したいのは、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 のベスト プラクティスに従って適切にフォーマットされます。これを行う良い方法はありますか?

4

2 に答える 2

21

PerlTidyは、コードを整然としたものにするだけでなく、本当に美しくします。ローカルのコーディング標準に従って簡単に調整できます。

于 2009-04-30T13:04:12.543 に答える
10

私はこれを使用しました:

use Perl::Tidy;
sub Format {
    my $source = shift;
    my $result;
    Perl::Tidy::perltidy(
        source      => \$source,
        destination => \$result,
        argv        => [qw(-pbp -nst)]
    );
    return $result;
}
于 2009-04-30T14:47:59.970 に答える