Perlによって生成されたPerlコードをどのように指定できますか?

StackOverflow https://stackoverflow.com/questions/806727

  •  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 は、コードを整頓するだけでなく、本当に美しくします。現地のコーディング標準に従って簡単に調整できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top