كيف يمكنني تجميل بيرل البرمجية التي تم إنشاؤها من قبل بيرل?
-
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 يجعل التعليمات البرمجية الخاصة بك ليس فقط مرتبة ، ولكن جميلة حقا.يمكنك بسهولة قرص وفقا المحلية معايير الترميز.