كيف يمكنني تجميل بيرل البرمجية التي تم إنشاؤها من قبل بيرل?

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

  •  03-07-2019
  •  | 
  •  

سؤال

لدي اختبار مولد مكتوب في بيرل.فإنه يولد الاختبارات التي تتصل محاكاة.هذه الاختبارات هي نفسها مكتوب في بيرل و الاتصال محاكاة عبر 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,
                ),
            ),
        )

لمدة سنتين indeces أود أن أرى:


    &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 من خلال prettifier مثل هذا:

&prettify($basic, "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