Linux 如何";使用「;在运行时创建一个模块

Linux 如何";使用「;在运行时创建一个模块,linux,perl,Linux,Perl,我正在开发一个模块,该模块将在特定条件下调用Perl模块 逻辑是这样的: $var = "db_tk"; if ( $var =~ /db/ ) { use dbi; } if ( $var =~ /tk/ ) { use tk; } 我无法在运行时使用require运行它们 use Module; 相当于 BEGIN { require Module; import Module; } 所以你想要 require Module; import Mo

我正在开发一个模块,该模块将在特定条件下调用Perl模块

逻辑是这样的:

$var = "db_tk";

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

if ( $var =~ /tk/ ) {
    use tk;
}
我无法在运行时使用
require
运行它们

use Module;
相当于

BEGIN {
    require Module;
    import Module;
}
所以你想要

 require Module;
 import Module;
除了在运行时从模块导入没有意义之外。所以你要么想要

# 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.

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

use if $var =~ /db/, 'DBI';
use if $var =~ /tk/, 'Tk';
相当于

BEGIN {
    require Module;
    import Module;
}
所以你想要

 require Module;
 import Module;
除了在运行时从模块导入没有意义之外。所以你要么想要

# 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.

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

use if $var =~ /db/, 'DBI';
use if $var =~ /tk/, 'Tk';
我无法使用“require”在运行时运行它们。是的,您可以。只要
use
起作用,
require
也会起作用:
use
调用
require

假设您打算使用标准CPAN模块
DBI
Tk
,而不是
DBI
Tk
,那么您需要这个

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

if ( $var =~ /tk/ ) {
    use Tk;
}
或者,只要您以前在
BEGIN
块中定义了
$var
,就可以使用
if
杂注

use if $var =~ /db/, DBI;
use if $var =~ /tk/, Tk;
我无法使用“require”在运行时运行它们。是的,您可以。只要
use
起作用,
require
也会起作用:
use
调用
require

假设您打算使用标准CPAN模块
DBI
Tk
,而不是
DBI
Tk
,那么您需要这个

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

if ( $var =~ /tk/ ) {
    use Tk;
}
或者,只要您以前在
BEGIN
块中定义了
$var
,就可以使用
if
杂注

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

为什么您不能使用
require
?你有错误吗?我想你现在对你的问题有了具体的答案,但是关于这个问题的更多信息,请参阅尼尔·鲍尔斯关于为什么你不能使用
require
?你有错误吗?我想你现在对你的问题有了具体的答案,但关于这个问题的更多信息,请参阅尼尔·鲍尔斯的文章