Domanda

Alcune delle nuove funzionalità di Perl 5.10 e 5.12, come "dire", sono definite come funzionalità, che è possibile abilitare o disabilitare esplicitamente utilizzando la "funzionalità" PRAGMA.Ma altre aggiunte, come i gruppi di cattura denominati di regexes, sono impliciti.

Quando scrivo Perl usando un interprete 5.10+, ma vuoi che sia anche eseguito il 5.8, posso fare perl lamentarsi di usare qualsiasi cosa che non sia in 5.8?Ovviamente, è una buona pratica testare il tuo codice su tutte le versioni principali che intendi correre, ma sarebbe ancora bello avere perl avvertirmi automaticamente.

È stato utile?

Soluzione

Quando voglio assicurarmi che un programma verrà eseguito in particolari versioni di Perl, lo testano sotto quella versione di Perl. Una caratteristica del mio rilascio test di applicazione sotto più perls prima che effettivamente carichi.

Ciò richiede di avere una suite di prova corretta e scrivi abbastanza test. È facile mantenere diverse installazioni perl separate allo stesso tempo, come mostravo in programmazione perl efficace .

Test :: minimaversione Sembra quasi che potrebbe funzionare, ma ha diverse limitazioni . Guarda solo il file che lo dai (quindi non controllerà nulla che carichi) e non penso che sia effettivamente guarda all'interno dei modelli di regex. Ciascuno di questi report che la versione minima è 5.004, che non è vero per nessuno di essi:

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

Parte del motivo Perl :: Minimalversion funziona perché cerca suggerimenti La sorgente lo dà già, ad esempio use 5.010 e use feature così via. Tuttavia, non è l'unico modo per abilitare le funzionalità. E, come nota, manca cose come la bandiera /p, almeno fino a quando qualcuno aggiunge un controllo per quello. Tuttavia, ti insegui sempre cose del genere con un PPI soluzione.

È più facile solo compilare, eseguire i test e scoprirlo.

Altri suggerimenti

Non penso che tu possa fare perl controllare mentre esegui il codice, ma Check out perl :: minimaversione e Test :: Minimalversion .(Quest'ultimo è solo un Test :: Builder wrapper attorno al primo.) .

Bene, leggendo altre risposte, la tua risposta è no, ma forse App :: Perlbrew può aiutarti a installare e gestire più versioni di Perl per il test.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top