Когда я хочу убедиться, что программа будет работать под определенными версиями perl, я тестирую ее под этой версией perl.Особенность моего выпуска приложения тестирует под несколькими Perl-файлами перед его фактической загрузкой.
Для этого требуется наличие надлежащего набора тестов и написание достаточного количества тестов.Также легко поддерживать несколько отдельных установок Perl одновременно, как я показываю в Эффективное программирование на Perl .
Test :: MinimumVersion почти звучит так, как можетработать, но у него есть несколько ограничений.Он только смотрит на файл, который вы ему даете (поэтому он не будет проверять все, что вы загружаете), и я не думаю, что он на самом деле просматривает шаблоны регулярных выражений.Каждый из этих отчетов сообщает, что минимальная версия - 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";
}
Часть причины Perl :: MinimumVersion работает потому, что ищет подсказкичто источник уже дает его, например use 5.010
и use feature
и так далее.Однако это не единственный способ включить функции.И, как вы заметите, он пропускает такие вещи, как флаг /p
, по крайней мере, пока кто-то не добавит проверку на это.Тем не менее, вы всегда будете преследовать такие вещи с помощью решения PPI .
Проще просто скомпилировать его, запустить тесты и выяснить.