2010-10-03 2 views
3

Je suis un débutant Moose et je me demande si le doit aussi être utilisé communComment contrôler les versions de mes objets Perl Moose?

our $VERSION = "0.001"; 
$VERSION = eval $VERSION; 

dans des emballages Moose, ou Moose a une alternative pour le contrôle de version. Impossible de trouver une référence dans Moose docs.

+0

Connexes: http://stackoverflow.com/questions/3639403/perl-version-string-why-use-eval-expr et http://stackoverflow.com/questions/3632135/what-is-setting-version -bon pour. Mais en général, il n'y a pas de façon différente/particulière de gérer les versions de paquet dans Moose; les conventions normales s'appliquent. – Ether

Répondre

10

Comme avec tous les paquets perl, il est généralement une bonne idée d'avoir un $VERSION défini en eux. Cela permet à d'autres choses de dépendre correctement de la version d'entre eux avec toutes les fonctionnalités dont ils ont besoin, soit en déclarant une dépendance dans leur Makefile.PL ou équivalent, ou directement lors du chargement du module en utilisant use SomeModule 1.23;.

La construction eval vous montrer est une bidouille. Il existe une distinction entre les versions régulières d'un module et les versions de développement. Traditionnellement, cela a été indiqué par un $VERSION avec un trait de soulignement. Cela signifie que quelque chose comme 0.001 serait une version normale et stable, tandis que quelque chose comme 0.001_01 serait une version de développement.

Le eval est utilisé pour se débarrasser de ce trait de soulignement lors de l'exécution, tout en le conservant dans la chaîne de version que les différents outils, y compris PAUSE, le Perl Authors Upload SErver, extraient. C'est pour éviter les avertissements tels que 0.001_01 is not numeric in ....

Vous trouverez cet idiome dans beaucoup de code. Heureusement, il y a une bonne alternative à cela. Au lieu d'indiquer le statut de développement par rapport au statut de non-développement dans le numéro de version des modules individuels, vous pouvez également le faire dans l'archive tar que vous pouvez télécharger sur CPAN en utilisant l'indicateur -TRIAL.

Au lieu de télécharger votre distribution en tant que My-Distribution-0.001.tar.gz, vous pouvez le renommer en My-Distribution-0.001-TRIAL.tar.gz. Les outils du CPAN le ramasseront et le traiteront comme une version de développement en conséquence. Notez que -TRIAL ne fait pas partie du $VERSION, uniquement du nom du tarball. Par conséquent, le eval kludge devient inutile.

Notez également qu'il existe d'autres façons de déclarer $VERSION est un paquet. A partir de Perl 5.12.0, vous êtes en mesure de le déclarer avec droit dans la déclaration de forfait:

package My::Package 0.001; 

Cependant, rien de tout cela est spécifique à Moose de quelque façon.

+0

+1 Merci pour la réponse détaillée et la mise à jour re. perl 5.12.0. –

+0

Doit-on mettre 'use 5.012' avant le nom du paquet? c'est moche ... –

+0

Non, tu ne le fais pas. 'package NAME VERSION;' était une erreur de syntaxe dans les versions antérieures de perls, cette fonctionnalité n'a donc pas besoin d'être explicitement activée. Vous pouvez toujours le faire, et obtenir toutes les autres choses que 'use 5.012' fait pour vous gratuitement, comme, par exemple, activer le pragma' strict'. – rafl

Questions connexes