Frage

Ich habe einen test-generator in Perl geschrieben.Es tests generiert, die eine Verbindung zu einem simulator.Diese tests sind selbst in Perl geschrieben und schließen Sie den simulator über die API.Ich möchte den generierten code zu sein, die für Menschen lesbar, das heißt, ich möchte es für richtig eingerückt und formatiert werden.Ist es ein guter Weg, es zu tun?

Details Folgen, oder Sie können überspringen, um die eigentliche Frage unten.

Dies ist ein Beispiel:


my $basic =  ABC
        TRIGGER        => DELAY(
            NUM            => 500,
            ),
        )
BASIC

my $additional =  STATE_IS(
        STATE          => DEF,
        INDEX          => 0,
        ),

ADDITIONAL

Ich möchte den Befehl ABC ausgeführt werden, mit einer Verzögerung von 500 (Einheiten nicht relevant sind gerade jetzt) nachdem ich nenne &event, und der Zustand der index 0 ist DEF.Manchmal werde ich auch wollen, zu warten, für indeces 1, 2, 3 usw...

Für nur einen index haben, ich möchte dies in meinem test:


    &event(
        CMD            => ABC
        TRIGGER        => DELAY(
            NUM            => 500,
            TRIGGER        => STATE_IS(
                STATE          => DEF,
                INDEX          => 0,
                ),
            ),
        )

Für zwei indeces, die ich sehen möchte:


    &event(
        CMD            => ABC
        TRIGGER        => DELAY(
            NUM            => 500,
            TRIGGER        => STATE_IS(
                STATE          => DEF,
                INDEX          => 0,
                TRIGGER        => STATE_IS(
                    STATE          => DEF,
                    INDEX          => 1,
                    ),
                ),
            ),
        )

Also im Grunde, ich bin das hinzufügen eines Blocks:


            TRIGGER        => STATE_IS(
                STATE          => DEF,
                INDEX          => 0,
                ),

für jeden index und der index-Nummer ändert.

Hier ist, wie ich bin, es zu tun:


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

Hier ist die eigentliche Frage

Das problem hier ist, dass der code schlecht eingerückt.Ich würde gerne führen Sie die resultierende $basic durch eine prettifier wie diese:

&prettify($basic, "perl");

Das format würde es schön nach Perl-best practices.Gibt es eine gute Möglichkeit, dies zu tun?

War es hilfreich?

Lösung

Ich habe diese verwendet:

use Perl::Tidy;
sub Format {
    my $source = shift;
    my $result;
    Perl::Tidy::perltidy(
        source      => \$source,
        destination => \$result,
        argv        => [qw(-pbp -nst)]
    );
    return $result;
}

Andere Tipps

PerlTidy macht den code nicht nur aufgeräumt, aber wirklich schön.Sie können leicht anpassen es entsprechend zu Ihrem lokalen coding-standards.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top