2012-03-09 23 views
6

であればプラグマの使用libに、私たちが行うことができます。Perlでのperl

使用libにリスト;

@INC内のパスのリストを含めます。同様に、次のようにすることができます。

CONDITION、MODULE => ARGUMENTS;

条件付きモジュールを含むように。

はCONDITION、LIST場合

利用libのようなもの、両方のミックスを行うことが可能です。

条件付きパスのリストを含めます。これはうまくいかないようです。

編集: は申し訳ありませんが、私はまだ働いて、それを得ることができません。これは私がやっていることですが、うまくいきません。何が間違っているとお考えですか?

use Data::Dumper; 

BEGIN { 
    my $env=$ENV{'ENV'}; 
    use if $env eq 'OLD', lib => '/home/vivek/OLD'; 
    use if $env eq 'NEW', lib => '/home/vivek/NEW'; 
} 

print Dumper \@INC; 
+2

あなたの条件は、コンパイル時に解決可能である必要があります。 – tchrist

+0

$ ENV {'ENV'}を変数に代入するのではなく、代わりに$ ENV {'ENV'}を直接使用すると動作します。しかし、BEGINブロックで$ envを計算することはできません。 – Vivek

+0

あなたの例は動作しません。 'my $ env = ... 'という代入は' use if'の後に実行されます。 'もしあれば'がまず先に行く。非my変数に割り当てられた、完全に囲まれた 'BEGIN'ブロックを持っていなければなりません。そのブロックの外側と下方には、変数を含む' use if'があります。 – tchrist

答えて

10

ifパラメータとして行の残りの部分を取る別のモジュール(厳密プラグマ)です。 libも別のプラグマです。文書構文use if CONDITION, MODULE => ARGUMENTSを見て、あなたは何を書くべきであることは正常に動作します

use if CONDITION, lib => LIST; 

であることがわかります。

+4

人々は、条件がコンパイル時の式だけを含むことができることを常に忘れています。 – tchrist

+0

@tchrist - 式は単に 'BEGIN {}'ブロックで計算された変数である可能性があります。 – DVK

+0

* CONDITION *は、コンパイルの関連箇所で利用可能なものであれば何でも構いません。そのため、前の 'BEGIN'ブロックにパッケージ変数とサブルーチンを含むものがあります。はい – Borodin