Quando voglio assicurarmi che un programma venga eseguito con particolari versioni di perl, lo collaudo con quella versione di perl. Una funzionalità dei miei test delle applicazioni release in molti perls prima che vengano effettivamente caricati.
Ciò richiede di disporre di una suite di test adeguata e di test sufficienti. È facile mantenere contemporaneamente anche diverse installazioni separate perl, come mostrato in Programmazione Perl effettiva.
Test::MinimumVersion sembra quasi che funzioni, ma ha diverse limitazioni. Guarda solo il file che gli dai (quindi non controllerà nulla che carichi), e non penso che effettivamente guardi all'interno dei pattern regex. Ognuno di questi segnalare che la versione minima è di 5.004, che non è vero per nessuno di loro:
#!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::MinimumVersion funziona è perché si guarda per i suggerimenti che la fonte dà già, come ad esempio use 5.010
, e use feature
così via. Tuttavia, non è l'unico modo per abilitare le funzionalità. E, come noterai, mancano cose come la bandiera /p
, almeno fino a quando qualcuno non aggiungerà un assegno. Tuttavia, sarai sempre a caccia di cose del genere con una soluzione PPI.
È più facile compilarlo, eseguire i test e scoprirlo.
fonte
2010-07-21 16:44:48
Vedere anche: http://stackoverflow.com/questions/2500892/how-can-i-test-when-a-feature-was-added-to-perl – mob