Terminal çıktısının renklendirmesini yapmak için Perl komut dosyamda Term::ANSIColor
kullanıyorum veişlevini kullanıyorum, bu yalnızca Term::ANSIColor
sürüm 2.01'de changelog'a göre eklendi. Yani, en az Term::ANSIcolor
sürümü bulamazsa, komut dosyasını otomatik olarak die
uygun bir hata iletisiyle yapmanın bir yolu var mı?Perl kodumdaki perl modülünün belirli bir sürümünü (veya daha üstünü) nasıl kullanırım?
cevap
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.
Ç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;
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ü.
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
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. –
@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? –
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. –
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
@brian muhtemelen bir önceki mesajda sizi etiketlemiş olmalı, bu yüzden şimdi ben :) – hobbs