2016-10-10 5 views
1

特定の条件でPerlモジュールを呼び出すモジュールを開発中です。実行時にモジュールを使用する方法

とロジックはこのようになります。

$var = "db_tk"; 

if ($var =~ /db/) { 
    use dbi; 
} 

if ($var =~ /tk/) { 
    use tk; 
} 

私はrequireを使用して、実行時にそれらを実行することはできませんよ。

+3

なぜあなたは 'require'を使うことができませんか?間違いはありますか? – xxfelixxx

+1

あなたの質問に具体的な回答があると思いますが、この件についてはNeil Bowersの記事「[他のモジュールをロードできるCPANモジュール]」(http://neilb.org/reviews/module-loading .html) –

答えて

9
use Module; 

は意味がありませんので、あなたは実行時にモジュールからのインポートを除き

require Module; 
import Module; 

をしたい
BEGIN { 
    require Module; 
    import Module; 
} 

に相当します。

# Conditionally load modules at compile-time. 

my $var; 
BEGIN { 
    $var = "db_tk"; 
} 

use if $var =~ /db/, 'DBI'; 
use if $var =~ /tk/, 'Tk'; 
8

必要「私が使用して、実行時にそれらを実行することはできませんよ」:だからどちらかが

# Conditionally load modules at runtime. 
# Gotta use fully-qualified names to call provided functions. 

my $var = "db_tk"; 

require DBI if $var =~ /db/; 
require Tk if $var =~ /tk/; 

または

# Conditionally load modules at compile-time. 

BEGIN { 
    my $var = "db_tk"; 

    if ($var =~ /db/) { require DBI; import DBI; } 
    if ($var =~ /tk/) { require Tk; import Tk; } 
} 

if module

をしたい、後者を簡素化するために使用することができます""
はい、そうです。 use作品、 requireも動作することをどこか: use通話 require

を使用すると、標準のCPANモジュールDBITkを使用するためのものと仮定すると、そしてないdbitk、あなたはこの

if ($var =~ /db/) { 
    use DBI; 
} 

if ($var =~ /tk/) { 
    use Tk; 
} 

以上が必要です、 BEGINブロックに$varを定義していれば、ifプラグマを使用できます。

use if $var =~ /db/, DBI; 
use if $var =~ /tk/, Tk; 
関連する問題