هل يمكنني التأكد من رمز بيرل مكتوبة على 5.10 + سيتم تشغيل على 5.8?
سؤال
يتم تعريف بعض الميزات الجديدة من بيرل 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 يمكن أن تساعدك في تثبيت وإدارة إصدارات متعددة من بيرل للاختبار.