2009-09-04 12 views
5

Aby zapewnić skrypt ma co najmniej X w wersji z Perl, można wykonać następujące czynnościJak mogę sprawdzić, czy wersja perla nie jest większa niż pewna wartość?

require 5.6.8; 

co jest najlepszym sposobem sprawdzenia, że ​​wersja nie jest zbyt wcześnie? (tj. Wersja 5.8.x, jeśli dobrze, ale 5,9 lub 5.10 nie są w porządku).

+3

byłbym ciekaw, w jakim kontekście to byłoby użyteczne. Perl zwykle stara się zachować kompatybilność wsteczną. –

+0

@JB Teoretyczny powód: późniejsze wersje Perla mogą mieć nieoczekiwane błędy. Na przykład 5.10.0 miał wyciek pamięci związany z qr //. W niektórych zamkniętych środowiskach starsza wersja ze znanymi błędami jest bezpieczniejsza niż nowa wersja z nieznanymi błędami. –

+1

W moim przypadku mam system, który zawiera kilka skompilowanych bibliotek, które nie będą działać na perl 5.10. –

Odpowiedz

23

Kod ten umrze, jeśli wersja Perl jest większa niż 5.8.9:

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

Możesz przeczytać więcej o $] w perldoc perlvar.

8

Możesz użyć specjalnej zmiennej $^V, aby sprawdzić wersję. Od 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. 

Można użyć $^V w porównaniu, na przykład smyczkową

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

Jeśli może być uruchomiony na Perl wcześniej niż 5.6.0, musisz użyć $] która zwraca prosty całkowitą.

+0

Nie sądzę, że porównanie ciągów będzie działać bez wersji.pm (której wiele wersji 5.6+ perl niekoniecznie musi mieć). Czy miałeś na myśli ($^V lt v5.10.0)? Nie widzę żadnego powodu, by faworyzować $^V ponad $]. – ysth

+3

Jeśli próbujesz użyć starych perli, to nie jest droga. –

0

Najprostszym rozwiązaniem byłoby, aby to zrobić:

no 5.010; 
+2

Tak naprawdę nie działa: spróbuj 'no 5.011', a otrzymasz komunikat, że' pakiet funkcji "5.11.0" nie jest obsługiwany przez Perl 5.10.0'. Raczej złamane .... – derobert

Powiązane problemy