2009-04-30 26 views
6

Tengo un generador de prueba escrito en Perl. Genera pruebas que se conectan a un simulador. Estas pruebas están escritas en Perl y se conectan al simulador a través de su API. Me gustaría que el código generado sea legible por el ser humano, lo que significa que me gustaría que esté adecuadamente sangrado y formateado. ¿Hay una buena manera de hacerlo?¿Cómo puedo embellecer el código de Perl generado por Perl?

Los detalles siguen, o puede saltarse la pregunta real a continuación.

Este es un ejemplo:


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

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

ADDITIONAL 

me gustaría el comando ABC para ser ejecutado con un retraso de 500 (unidades no son relevantes en este momento) después de que llamo &event, y el estado de índice 0 es DEF. A veces también voy quiero esperar a que Indices de 1, 2, 3, etc ...

Para un solo índice Me gustaría ver esto en mi prueba:


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

Durante dos Indices de I' gustaría ver:


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

Así que básicamente estoy añadiendo un bloque de:


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

para cada índice, y cambia el número de índice.

Así es como lo estoy haciendo:


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 

aquí está la pregunta real

El problema aquí es que el código sale mal sangría. Me gustaría correr el $basic resultante a través de un prettifier de la siguiente manera:

&prettify($basic, "perl"); 

Lo cual formatearlo muy bien de acuerdo con las mejores prácticas de Perl. ¿Hay alguna buena manera de hacer esto?

Respuesta

10

He utilizado este:

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

PerlTidy hace que su código no solo sea ordenado, sino realmente hermoso. Puede modificarlo fácilmente de acuerdo con los estándares de codificación locales.

Cuestiones relacionadas