2010-11-22 27 views
0

Olası yinelenen bir modülü kullanmak:
How do I use a Perl package known only in runtime?Nasıl olursa koşulu

Ben bir koşulu karşılayan yalnızca eğer bir modül yüklemek istiyor.

Lütfen bunu nasıl kullanacağımı lütfen bana bildirin. Bunun sözdizimini biliyorum. Ancak, use::strict modülünü kullandığımda bir hata alıyorum. Modülün tanımlanması gerektiğini belirten bir hata atıyor. 'use :: strict' modülünü kullanmazsam program düzgün çalışır. İşte

sözdizimi:

use if CONDITION, MODULE => ARGUMENTS; 

beni bu iş modülünü use::strict kullanarak nasıl bildirin. Eğer doğru sorununuzu anlamak

+0

Ayrıca bkz. Http://stackoverflow.com/questions/2292946/how-can-i-load-a-perl-module-at-runtime ve http://stackoverflow.com/questions/3957498/how-can -i-koşullu-ithalat-a-paket-in-perl –

+2

Ayrıca, * okuma * için hata ve uyarı mesajları olduğunu unutmayın. Bunları anlamadıysanız, bu makineleri oluşturan kodla birlikte gönderin. ** Bilgisayarınızdaki ** ** ne yaptığınızı bilemeyeceğinize meydan okumakta zorluk çekebilirsiniz. İnsanların size yardım etmelerine yardımcı olun. –

+3

Belki de Acme :: use :: strict :: with :: pride'? – mob

cevap

1

, muhtemelen şöyle yerine eval kullanabilirsiniz: if module from CPAN kullanmaya çalışıyorsanız gibi

if ($condition) { 
    require Conditional::Module; 
    Conditional::Module->import(qw{ methods to be imported }); 
} 
+0

Ana programın derlenmesinden uzun bir süre sonra derleyicinin kurallarını/sözdizimini değiştirmek, oldukça az kullanışlılık gösteriyor. – tchrist

5

Sen require kullanabilirsiniz . Çalıştırmaya çalıştığınız tam kodu ve aldığınız tam hata mesajını gösterir misiniz? Bu olmadan, size yardım etme girişimleri büyük ölçüde tahmin edilir.

Güncelleştirme: Aslında, if'un çekirdek bir modül olduğunu görüyorum (ve bir süredir). Yine de sizden daha fazla bilgiye ihtiyacımız var.

Güncelleme güncelleme:

#!/usr/bin/perl 

BEGIN { 
    $use_strict = 0; 
} 

use if $use_strict, strict; 

$use_strict bayrağının ayar sıkı modunun açık olup olmadığını belirler: İşte bir örnek.

+1

“use strict” ile bağlantılı olarak “kullanıp kullanmaya” çalışmaktadır, ancak bazı ilginç mesajlarda muhtemelen “use :: strict” yazmaktadır. –

+0

Sinan: Gördüm. Kendimi hiç kullanmamıştım. –

3

görünüyor:

if (some test here) 
    eval "use WHATEVERMODULE"; 
+4

Tarihsel bilgiler: IlyaZ, 'EXPR' kullanıyorsa 'kullanmak zorunda kalmıştır, ancak diğerleri vurmuştur, bu yüzden onun yerine. – ysth

3

Tamam, bu nedenle if'u kullanmaya çalışıyorsunuz. Bununla birlikte, katı kullanımın ne anlama geldiğini yanlış anlamışsınız gibi görünüyorsunuz.

Size olmalı, şu anlama gelir:

use strict; 

(ve tabii ki, onun pal use warnings;) Senaryonuzun başında.

Not: use::strict, hayal ettiğiniz şeyi yapmıyor.