2009-09-04 25 views
5

Để đảm bảo một kịch bản có ít nhất phiên bản X của perl, bạn có thể làm như sauLàm cách nào để kiểm tra xem phiên bản perl có lớn hơn một số giá trị không?

require 5.6.8; 

cách tốt nhất để kiểm tra xem một phiên bản không phải là quá gần đây là gì? (ví dụ: phiên bản 5.8.x nếu không, nhưng 5.9 hoặc 5.10 không ổn).

+3

Tôi tò mò muốn được biết trong đó bối cảnh này sẽ hữu ích. Perl có xu hướng đi ra khỏi con đường của mình để bảo tồn tính tương thích ngược. –

+0

@JB Lý do lý thuyết: các phiên bản sau của Perl có thể có lỗi không mong muốn. Ví dụ, 5.10.0 có rò rỉ bộ nhớ liên quan đến qr //. Trong một số môi trường bị khóa nhất định, phiên bản cũ hơn với các lỗi đã biết là an toàn hơn một phiên bản mới có lỗi không xác định. –

+1

Trong trường hợp của tôi, tôi có một hệ thống bao gồm một loạt các thư viện được biên dịch sẽ không hoạt động trên perl 5.10. –

Trả lời

23

Mã này sẽ chết nếu phiên bản của Perl lớn hơn 5.8.9:

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

Bạn có thể đọc thêm về $] trong perldoc perlvar.

8

Bạn có thể sử dụng biến số $^V đặc biệt để kiểm tra phiên bản. Từ 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. 

Bạn có thể sử dụng $^V trong so sánh chuỗi, ví dụ:

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

Nếu bạn có thể chạy trên perl sớm hơn 5.6.0, bạn sẽ cần sử dụng $] trả về một số nguyên đơn giản.

+0

Tôi không nghĩ rằng so sánh chuỗi sẽ hoạt động mà không có version.pm (mà nhiều phiên bản 5.6+ perl không nhất thiết phải có). Ý bạn là ($^V lt v5.10.0)? Tôi không thấy lý do nào để ủng hộ $^V trên $]. – ysth

+3

Nếu bạn đang cố gắng sử dụng perls cũ, đây không phải là cách để đi. –

0

Giải pháp đơn giản nhất sẽ được để làm điều này:

no 5.010; 
+2

Không thực sự hoạt động: hãy thử 'no 5.011' và bạn sẽ gặp phải lỗi" gói tính năng "5.11.0" không được Perl 5.10.0' hỗ trợ. Thay vì bị hỏng .... – derobert

Các vấn đề liên quan