هل يمكنني التأكد من رمز بيرل مكتوبة على 5.10 + سيتم تشغيل على 5.8?

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

  •  26-09-2020
  •  | 
  •  

سؤال

يتم تعريف بعض الميزات الجديدة من بيرل 5.10 و 5.12 ، مثل "قل" ، كما الميزات ، التي يمكنك تمكين أو عدم السماح صراحة باستخدام "ميزة" براغما.لكن الإضافات الأخرى ، مثل مجموعات الالتقاط المسماة من التعبيرات العادية ، ضمنية.

عندما أكتب بيرل باستخدام 5.10 + مترجم, ولكن نريد أن تعمل أيضا على 5.8, يمكنني جعل بيرل يشكو من استخدام أي شيء ليس في 5.8?من الواضح أنه من الممارسات الجيدة اختبار التعليمات البرمجية الخاصة بك على جميع الإصدارات الرئيسية التي تنوي تشغيلها ، ولكن لا يزال من الجيد أن يحذرني بيرل تلقائيا.

هل كانت مفيدة؟

المحلول

عندما أريد التأكد من أن البرنامج سيتم تشغيل تحت إصدارات معينة من بيرل ، وأنا اختباره تحت هذا الإصدار من بيرل.سمة من سمات بلدي الإصدار اختبارات التطبيق تحت بيرلز متعددة قبل تحميله في الواقع.

هذا يتطلب أن يكون لديك مجموعة اختبار مناسبة وكتابة اختبارات كافية.فإنه من السهل للحفاظ على العديد من المنشآت بيرل منفصلة في نفس الوقت ، أيضا ، كما تبين لي في برمجة بيرل الفعالة.

اختبار:: الإصدار الأدنى يبدو تقريبا مثل ذلك قد تعمل ، ولكن لديها العديد من القيود.يبدو فقط في الملف الذي تعطيه (لذلك لن تحقق أي شيء قمت بتحميل) ، وأنا لا أعتقد أنه يبدو في الواقع داخل أنماط التعبير العادي.كل من هذه التقارير أن الحد الأدنى للإصدار هو 5.004 ، وهذا ليس صحيحا بالنسبة لأي منها:

#!perl

use Perl::MinimumVersion;

my $p_flag = <<'SOURCE';
'123' =~ m/[123]/p; # 5.10 feature
SOURCE

my $named_capture = <<'SOURCE';
'123' =~ m/(?<num>[123])/; # 5.10 feature
SOURCE

my $r_line_ending = <<'SOURCE';
'123' =~ m/[123]\R/p; # 5.12 feature
SOURCE

my $say = <<'SOURCE';
say 'Hello';
SOURCE

my $smart_match = <<'SOURCE';
$boolean = '123' ~~ @array;
SOURCE

my $given = <<'SOURCE';
given( $foo ) {
    when( /123/ ) { say 'Hello' }
    };

SOURCE

foreach my $source ( $p_flag, $named_capture, $r_line_ending, $say, $smart_match, $given ) {
    print "----Source---\n$source\n-----";
    my $version = Perl::MinimumVersion->new( \$source  )->minimum_version;
    print "Min version is $version\n";
    }

جزء من السبب بيرل:: الإصدار الأدنى يعمل لأنه يبحث عن تلميحات أن المصدر يعطيها بالفعل، مثل use 5.010, ، و use feature هكذا.ومع ذلك ، هذه ليست الطريقة الوحيدة لتمكين الميزات.وكما ستلاحظ ، فإنه يفتقد أشياء مثل /p علم, على الأقل حتى يضيف شخص ما شيكا لذلك.ومع ذلك ، عليك أن تكون دائما مطاردة أشياء من هذا القبيل مع مؤشر أسعار المنتجين الحل.

من الأسهل فقط تجميعها وتشغيل الاختبارات ومعرفة ذلك.

نصائح أخرى

لا أعتقد أنه يمكنك إجراء فحص بيرل أثناء تشغيل التعليمات البرمجية، ولكن تحقق من بيرل :: الحد الأدنى و اختبار :: الحد الأدنى .(هذا الأخير هو مجرد اختبار :: باني التفاف حول السابق.)

حسنا من قراءة إجابات أخرى إجابتك ليست، ولكن ربما التطبيق :: perlbrew يمكن أن تساعدك في تثبيت وإدارة إصدارات متعددة من بيرل للاختبار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top