我是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');
答案 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 strict
和use warnings 'all'
。如果你有这些,你需要引用模块名称,如上所示