Question

Certaines des nouvelles fonctionnalités de Perl 5.10 et 5.12, telles que "say", sont définies comme des fonctionnalités que vous pouvez activer ou désactiver explicitement à l'aide du pragma "feature".Mais d'autres ajouts, comme les groupes de capture nommés d'expressions régulières, sont implicites.

Lorsque j'écris Perl à l'aide d'un interpréteur 5.10+, mais que je souhaite qu'il fonctionne également sur 5.8, puis-je demander à Perl de se plaindre de l'utilisation de quelque chose qui n'est pas dans la version 5.8 ?Évidemment, c'est une bonne pratique de tester votre code sur toutes les versions majeures sur lesquelles vous comptez l'exécuter, mais ce serait quand même bien que Perl me prévienne automatiquement.

Était-ce utile?

La solution

Lorsque je veux m'assurer qu'un programme fonctionnera sous des versions particulières de Perl, je le teste sous cette version de Perl.Une caractéristique de mon libérer l'application teste sous plusieurs perls avant de la télécharger.

Cela nécessite que vous disposiez d’une suite de tests appropriée et que vous écriviez suffisamment de tests.Il est également facile de gérer plusieurs installations Perl distinctes en même temps, comme je le montre dans Programmation Perl efficace.

Test ::Version minimale on dirait presque que cela pourrait fonctionner, mais cela présente plusieurs limites.Il ne regarde que le fichier que vous lui donnez (il ne vérifiera donc rien de ce que vous chargez), et je ne pense pas qu'il regarde réellement les modèles d'expression régulière.Chacun d'entre eux indique que la version minimale est 5.004, ce qui n'est vrai pour aucun d'entre eux :

#!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";
    }

Une partie de la raison Perl ::Version minimale fonctionne parce qu'il recherche les indices que la source lui donne déjà, comme use 5.010, et use feature bientôt.Cependant, ce n'est pas le seul moyen d'activer des fonctionnalités.Et, comme vous le remarquerez, il manque des choses comme le /p flag, au moins jusqu'à ce que quelqu'un ajoute un chèque pour cela.Cependant, vous poursuivrez toujours des choses comme ça avec un IPP solution.

Il est plus facile de simplement le compiler, d'exécuter les tests et de le découvrir.

Autres conseils

Je ne pense pas que vous puissiez faire vérifier Perl lorsque vous exécutez le code, mais Découvrez PERL :: Minushenversion et TEST :: MinustiVersion .(Ce dernier est juste un Test :: Builder wrapper autour du premier.)

Bien de lire d'autres réponses Votre réponse est non, mais peut-être App :: Perlbrew peut vous aider à installer et à gérer plusieurs versions de Perl pour les tests.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top