2009-09-04 8 views
5

Para garantizar un guión tiene al menos la versión X de Perl, puede hacer lo siguiente¿Cómo puedo verificar que una versión de Perl no sea mayor que algún valor?

require 5.6.8; 

¿Cuál es la mejor manera de comprobar que una versión no es demasiado reciente? (es decir, la versión 5.8.x si está bien, pero 5.9 o 5.10 no están bien).

+3

Sería curioso saber en qué contexto esto sería útil. Perl tiende a salir de su camino para preservar la compatibilidad con versiones anteriores. –

+0

@JB Una razón teórica: las versiones posteriores de Perl pueden tener errores inesperados. Por ejemplo, 5.10.0 tenía una pérdida de memoria relacionada con qr //. En ciertos entornos bloqueados, una versión anterior con errores conocidos es más segura que una nueva versión con errores desconocidos. –

+1

En mi caso, tengo un sistema que incluye un conjunto de bibliotecas compiladas que no funcionarán en Perl 5.10. –

Respuesta

23

Este código va a morir si la versión de Perl es mayor que 5.8.9:

die "woah, that is a little too new" unless $] <= 5.008009; 

Puede leer más sobre $] en perldoc perlvar.

8

Puede usar la variable especial $^V para verificar la versión. De perldoc perlvar:

$^V 

The revision, version, and subversion of the Perl interpreter, represented as a 
version object. 

This variable first appeared in perl 5.6.0; earlier versions of perl will see an  
undefined value. Before perl 5.10.0 $^V was represented as a v-string. 

Puede utilizar $^V en una comparación de cadenas, por ejemplo,

if ($^V lt 'v5.10.0') 

Si es posible que se ejecuta en un Perl antes de 5.6.0, tendrá que utilizar $] que devuelve un entero simple.

+0

No creo que la comparación de cadenas funcione sin version.pm (que muchas versiones de 5.6+ perl no necesariamente tienen). ¿Quiso decir ($^V lt v5.10.0)? No veo ninguna razón para favorecer $^V sobre $]. – ysth

+3

Si está tratando de usar perls antiguos, este no es el camino a seguir. –

0

La solución más sencilla sería la de hacer esto:

no 5.010; 
+2

Realmente no funciona: intente 'no 5.011' y obtendrá un error que' paquete de características '5.11.0' 'no es soportado por Perl 5.10.0'. Bastante roto ... – derobert

Cuestiones relacionadas