문제

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. 때때로 나는 또한 Indeces 1, 2, 3 등을 기다리고 싶을 것입니다 ...

하나의 색인만으로 테스트에서 이것을보고 싶습니다.


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

두 가지 둔감에 대해서는 다음과 같습니다.


    &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;
}

다른 팁

펄리 코드는 깔끔 할뿐만 아니라 정말 아름답게 만듭니다. 현지 코딩 표준에 따라 쉽게 조정할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top