根据此处提供的答案,我正在尝试验证是否安装了 perl 模块。为此,我有:
# &getYN and &prompt are only included here for completeness
sub getYN {
unless ( $autoyes =~ /[Yy]/ ) {
my ( $prompt, $default ) = @_;
my $defaultValue = $default ? "[$default]" : "";
print "$prompt $defaultValue: ";
chomp( my $input = <STDIN> );
return $input ? $input : $default;
} else {
return "Y";
}
}
sub prompt {
my ( $prompt, $default ) = @_;
my $defaultValue = $default ? "[$default]" : "";
print "$prompt $defaultValue: ";
chomp( my $input = <STDIN> );
return $input ? $input : $default;
}
&chklib("RRDTool::OO");
sub chklib {
my $lib = shift;
eval { require $lib; };
if ($@) {
print "You are missing a required Perl Module: $lib\n";
my $ok = &getYN( "Shall I attempt to install it for you?", "y" );
if ( $ok =~ /[Yy]/ ) {
require CPAN;
CPAN::install($lib);
} else {
print "Installation requires $lib\n";
exit;
}
}
}
这按预期运行,但由于某种原因,eval 返回我没有安装 RRDTool::OO,而实际上我安装了。
如果我创建一个空文件并运行:
# File foo.pl
use strict;
$| = 1;
use RRDTool::OO;
然后我没有错误。
但是当我使用 print $@; 运行第一个文件时,它返回:
Can't locate RRDTool::OO in ...
我究竟做错了什么?