2009-09-04 4 views
5

Pour assurer un script a au moins la version X de Perl, vous pouvez effectuer les opérations suivantesComment puis-je vérifier qu'une version perl n'est pas supérieure à une certaine valeur?

require 5.6.8; 

Quelle est la meilleure façon de vérifier qu'une version est pas trop récente? (c'est-à-dire la version 5.8.x si elle est correcte, mais 5,9 ou 5,10 ne conviennent pas).

+3

Je serais curieux de savoir dans quel contexte cela serait utile. Perl a tendance à faire des pieds et des mains pour préserver la rétrocompatibilité. –

+0

@JB Une raison théorique: les versions ultérieures de Perl peuvent avoir des bogues inattendus. Par exemple, 5.10.0 avait une fuite de mémoire liée à qr //. Dans certains environnements verrouillés, une ancienne version avec des bogues connus est plus sûre qu'une nouvelle version avec des bogues inconnus. –

+1

Dans mon cas, j'ai un système qui inclut un tas de bibliothèques compilées qui ne fonctionneront pas sur Perl 5.10. –

Répondre

23

Ce code va mourir si la version de Perl est supérieure à 5.8.9:

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

Vous pouvez en savoir plus sur $] dans perldoc perlvar.

8

Vous pouvez utiliser la variable spéciale $^V pour vérifier la version. 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. 

Vous pouvez utiliser $^V dans une comparaison de chaînes, par exemple

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

Si vous pouvez exécuter sur un perl plus tôt que 5.6.0, vous aurez besoin d'utiliser $] qui retourne un entier simple.

+0

Je ne pense pas que la comparaison de chaînes fonctionnera sans version.pm (que beaucoup de versions de 5.6+ perl n'ont pas nécessairement). Vouliez-vous dire ($^V lt v5.10.0)? Je ne vois aucune raison de préférer $^V sur $]. – ysth

+3

Si vous essayez d'utiliser de vieux perls, ce n'est pas la voie à suivre. –

0

La solution la plus simple serait de le faire:

no 5.010; 
+2

Ne fonctionne pas vraiment: essayez 'no 5.011' et vous obtiendrez une erreur que' feature bundle "5.11.0" n'est pas supporté par Perl 5.10.0'. Plutôt cassé .... – derobert

Questions connexes