2011-01-23 19 views

cevap

21

Sadece:

use Term::ANSIColor 2.01; 

perldoc -f use bakınız: VERSİYONU argüman Modülü ve LİSTESİ arasında varsa

kullanım Modülü VERSİYONU LİSTESİ

ardından kullanım arayacak Modülde VERSION yöntemi, argüman olarak verilen versiyon ile birlikte. UNIVERSAL sınıfından miras alınan varsayılan VERSION yöntemi, verilen sürüm $ Module :: VERSION değişkeninin değerinden daha büyükse croaks.

7

Çoğu modül $VERSION paket değişkenini tanımlar.

use Term::ANSIColor; 
die "Sorry, this program needs Term::ANSIColor >= v2.01!\n" 
    unless $Term::ANSIColor::VERSION >= 2.01; 

Bu aynı zamanda bir modülün bir maksimum versiyonunu belirtmek için iyi bir yoldur.

use Module::Foo; 
die "You need an *older* version of Module::Foo that ", 
    "still has the &barbaz method defined" 
    if $Module::Foo::VERSION >= 0.47; 
+0

Bunu yapmanın iyi bir yolu. İçe aktarma listesinde bir sürüm sağladığınızda, aslında bunu işleyen içe aktarma yöntemine güvenirsiniz. Sadece bu değil, içe aktarma tekniği sadece bu sürümü veya daha sonra gerektirir. Eğer belirli bir versiyon veya versiyon çeşitliliği istiyorsanız, bu daha genel teknikle sonuçlanır. –

+1

Aslında, 'import' yönteminden bir yardım gerekli değildir -' use 'veya' require' kullandığınızda bir sürüm numarası ile, 'VERSION' yöntemine bir çağrı oluşturulur. Ancak, özellikle geçersiz kılmayan her paket, "UNIVERSAL" tarafından uygun bir "VERSION" yöntemini alır. – hobbs

+0

@brian muhtemelen bir önceki mesajda sizi etiketlemiş olmalı, bu yüzden şimdi ben :) – hobbs

2

Basitçe kullanmak istediğiniz sürümü belirtin: sürüm değil, en az 2.13 olması durumunda

use Some::Module 2.13; 

, operasyon başarısız olur.

komut satırında geçerli sürümü ile deneme yapabilirsiniz:

perl -MSome::Module=9999 -e 'exit 0' 

Bu genellikle kullanmaya çalıştığınız modül olur sürece (hata mesajında ​​gösterilen yanlış sürüm numarasıyla ölecek 5 haneli veya daha uzun bir sürüm numarasına sahip olmak veya modül strict gibi değilse ve bir sürüm numarasıyla veya URI gibi komut satırından yüklenmekten hoşlanmıyorsanız (ayrıntılar için yorumlara bakın)). Normalde kullanmayan bir makinede

$ perl -MFile::Find=999 -e 'exit 0' 
File::Find version 999 required--this is only version 1.07 at 
/usr/perl5/5.8.4/lib/Exporter/Heavy.pm line 121. 
BEGIN failed--compilation aborted. 
$ perl -e 'use File::Find 999; exit 0' 
File::Find version 999 required--this is only version 1.07 at -e line 1. 
BEGIN failed--compilation aborted at -e line 1. 
$ 

Run, Perl dolayısıyla eskimiş sürümü.

+3

Bu ikisi birbirinden farklıdır; komut satırı -M anahtarı, kullanmak için bir VERSION belirtmez; bunun yerine, modülün içe aktarma yordamına bir parametre olarak sağlar ve Exporter kullanan modüller daha sonra bir sürüm denetimi yapar. Ancak tüm modüller İhracatçı'yı kullanmaz. – ysth

+0

Bu, tüm modüller ile güvenilir bir şekilde çalışmaz, bu yüzden ysth'nin söylediği gibi genel bir teknik değil. –

+1

@ysth ve @brian: Tamam - Sözünü ona aldım; CPAN'daki her modülde denemedim, ancak sürüm numaraları ile ilgili bir problemle karşılaştığım tek zaman, kendi versiyonunu güvenilir bir şekilde ayarlamayan bir ana modülün alt modülleri. Çalışılmadığı bir veya iki modül verebilir misiniz? –