2009-09-04 9 views
5

Per garantire uno script ha almeno la versione X di Perl, è possibile effettuare le seguenti operazioniCome posso verificare che una versione perl non sia maggiore di qualche valore?

require 5.6.8; 

Qual è il modo migliore di verificare che una versione non troppo recente? (ad esempio versione 5.8.x se corretta, ma 5.9 o 5.10 non sono ok).

+3

Sarei curioso di sapere in quale contesto questo sarebbe utile. Perl tende a fare di tutto per preservare la retrocompatibilità. –

+0

@JB Una ragione teorica: le versioni successive di Perl possono avere bug inaspettati. Ad esempio, 5.10.0 aveva una perdita di memoria relativa a qr //. In alcuni ambienti bloccati, una versione precedente con bug noti è più sicura di una nuova versione con bug sconosciuti. –

+1

Nel mio caso, ho un sistema che include un sacco di librerie compilate che non funzionano su perl 5.10. –

risposta

23

Questo codice morirà se la versione di Perl è maggiore di 5.8.9:

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

Si può leggere di più su $] in perldoc perlvar.

8

È possibile utilizzare la variabile speciale $^V per verificare la versione. Da 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. 

È possibile utilizzare $^V in un confronto di stringhe, per esempio

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

Se si può essere in esecuzione su un perl prima di quanto 5.6.0, è necessario utilizzare $] che restituisce un semplice intero.

+0

Non penso che il confronto delle stringhe funzionerà senza version.pm (che molte versioni di 5.6+ perl non hanno necessariamente). Intendevi ($^V lt v5.10.0)? Non vedo alcun motivo per favorire $^V su $]. – ysth

+3

Se stai cercando di usare vecchi perls, questa non è la strada da percorrere. –

0

La soluzione più semplice sarebbe quella di fare questo:

no 5.010; 
+2

Non funziona davvero: prova 'no 5.011' e riceverai un errore che' feature bundle "5.11.0" non è supportato da Perl 5.10.0'. Piuttosto rotto .... – derobert

Problemi correlati