Pregunta

Algunas de las nuevas características de Perl 5.10 y 5.12, como "say", se definen como características que puede habilitar o no permitir explícitamente usando el pragma "feature".Pero otras adiciones, como los grupos de captura de expresiones regulares con nombre, están implícitos.

Cuando escribo Perl usando un intérprete 5.10+, pero quiero que también se ejecute en 5.8, ¿puedo hacer que Perl se queje por usar algo que no esté en 5.8?Obviamente, es una buena práctica probar su código en todas las versiones principales en las que desea ejecutarlo, pero aún así sería bueno que Perl me avisara automáticamente.

¿Fue útil?

Solución

Cuando quiero asegurarme de que un programa se ejecutará con determinadas versiones de Perl, lo pruebo con esa versión de Perl.Una característica de mi liberar La aplicación se prueba en múltiples Perls antes de que se cargue.

Esto requiere que tenga un conjunto de pruebas adecuado y escriba suficientes pruebas.También es fácil mantener varias instalaciones de Perl separadas al mismo tiempo, como muestro en Programación Perl eficaz.

Prueba::Versión mínima Casi parece que podría funcionar, pero tiene varias limitaciones.Solo mira el archivo que usted le proporciona (por lo que no verificará nada de lo que cargue) y no creo que en realidad mire dentro de los patrones de expresiones regulares.Cada uno de estos informa que la versión mínima es 5.004, lo que no es cierto para ninguno 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::Versión mínima funciona es porque busca pistas que la fuente ya le da, como use 5.010, y use feature pronto.Sin embargo, esa no es la única forma de habilitar funciones.Y, como notarás, omite cosas como el /p bandera, al menos hasta que alguien agregue un cheque para eso.Sin embargo, siempre estarás persiguiendo cosas así con un IPP solución.

Es más fácil simplemente compilarlo, ejecutar las pruebas y descubrirlo.

Otros consejos

No creo que puedas hacer verificación de Perl a medida que ejecuta el código, pero Echa un vistazo a perl :: Minetineversion y prueba :: Minetineversion .(Este último es solo un prueba :: constructor envoltorio alrededor del primero.)

Bueno de leer otras respuestas Su respuesta es No, pero quizás APLICACIÓN :: PERLBREW puede ayudarlo a instalar y administrar varias versiones de PERL para probar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top