Cuando deseo asegurarme de que un programa se ejecutará en versiones particulares de perl, lo pruebo bajo esa versión de perl. Una característica de mi aplicación release prueba bajo múltiples perls antes de que realmente se cargue.
Esto requiere que tenga un conjunto de pruebas adecuado y que escriba suficientes pruebas. Es fácil mantener varias instalaciones de perl por separado al mismo tiempo, como lo muestro en Programación eficaz Perl.
Test::MinimumVersion casi parece que podría funcionar, pero tiene varias limitaciones. Solo mira el archivo que le das (por lo que no verificará nada que cargues), y no creo que realmente se vea dentro de los patrones de expresiones regulares. Cada uno de éstos informan que la versión mínima es de 5.004, lo que no es cierto para cualquiera de ellos:
#!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";
}
Parte de la razón Perl::MinimumVersion funciona es porque busca indicios de que la fuente da ya, como use 5.010
, y use feature
etc. Sin embargo, esa no es la única forma de habilitar funciones. Y, como notará, omite elementos como la bandera /p
, al menos hasta que alguien agregue un cheque para eso. Sin embargo, siempre estará persiguiendo cosas así con una solución PPI.
Es más fácil compilarlo, ejecutar las pruebas y averiguarlo.
Vea también: http://stackoverflow.com/questions/2500892/how-can-i-test-when-a-feature-was-added-to-perl – mob