有条件地在perl中包含一个模块

时间:2015-12-08 12:16:21

标签: perl

我是perl的新手,只遇到过一个案例。

有人能说出为什么会因为错误而失败 未定义的子程序& main :: color

$condition = 1;
use if ( $condition ), Term::ANSIColor;
print color('bold red');
print "hii";
print color('reset');

然后传递

use if ( 1 ), Term::ANSIColor;
print color('bold red');
print "hii";
print color('reset');

1 个答案:

答案 0 :(得分:7)

这是因为use语句是在编译时执行的,而你的分配是在运行时执行而尚未执行

你可以通过使用BEGIN块在编译时进行分配来解决这个问题,就像这样。 请注意, 变量必须在 块之外声明,否则它将在块的本地,并且在结束之前将消失

my $condition;
BEGIN {
    $condition = 1;
}

use if $condition, 'Term::ANSIColor';

print color('bold red');
print "hii";
print color('reset');

还要注意 总是在每个Perl程序的顶部都有use strictuse warnings 'all'。如果你有这些,你需要引用模块名称,如上所示