2010-11-22 9 views
0

可能な重複してモジュールを使用するには:
How do I use a Perl package known only in runtime?どうかの条件

が、私はそれが条件を満たしている場合にのみ、モジュールをロードします。

誰でも使用方法を教えてください。 私はそれの構文を知っています。しかし、私はモジュールuse::strictを使用するとエラーが発生します。 モジュールを定義する必要があることを示すエラーがスローされます。 'use :: strict'モジュールを使用しないとプログラムは正常に動作します。ここで

は、構文は次のとおりです。

use if CONDITION, MODULE => ARGUMENTS; 

私はこの仕事がモジュールuse::strictを使用する方法を教えてください。

+0

http://stackoverflow.com/questions/2292946/how-can-i-load-a-perl-module-at-runtimeおよびhttp://stackoverflow.com/questions/3957498/how-canも参照してください。 -i-conditionally-import-a-package-in-perl –

+2

エラーと警告メッセージは、* read *のためのものです。あなたがそれらを理解していない場合は、それらのマシンを生成したコードと一緒に投稿してください。 **あなたの**コンピュータで何が起こっているかを**私たちが**座っている場所から神にしようとすることに伴う困難を想像することができます。人々があなたを助けるのを助ける。 –

+3

彼は 'Acme :: use :: strict :: with :: pride'を意味するのでしょうか? – mob

答えて

1

私が正しくあなたの問題を理解していれば、おそらくそうのように、代わりにevalを使用することができます。

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

メインプログラムが終了してからコンパイラの規則や構文を調整するのは、コンパイルが非常に役に立たないようです。 – tchrist

5

あなたはrequireを使用することができます:あなたはif module from CPANを使用しようとしているよう

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

彼は 'use strict'と組み合わせて' if 'を使ってみようとしていますが、 'use :: strict'を書いているのでおそらく面白いメッセージが出ます。 –

+0

シナン:そうです。自分で 'if'を使ったことはありません。 –

3

が見えます。実行しようとしているコードと正確なエラーメッセージを表示できますか?それがなければ、あなたを助けるどんな試みも主に推測になるでしょう。

更新:実際には、ifはコアモジュールであり(しばらくありました)。私たちはまだあなたからより多くの情報を必要とします。更新

更新:ここに例を示します。

#!/usr/bin/perl 

BEGIN { 
    $use_strict = 0; 
} 

use if $use_strict, strict; 

$use_strictフラグの設定が厳密モードがオンされたか否かを判定する。

+4

歴史的なトリビア:IlyaZは「EXPRならば...を使う」ことに取り組んだが、他の人はそれを撃ったので、代わりにif.pmを書いた。 – ysth

3

これで、ifを使用しようとしています。

ただし、厳密に使用することが誤解されているようです。

それはあなたが持っている必要があり、意味:

use strict; 

(と、もちろん、その仲間use warnings;)あなたのスクリプトの先頭に。

use::strictは、あなたが想像していることはしません。