ここで提供された回答に基づいて、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;
}
}
}
これは期待どおりに実行されますが、実際にはインストールされているのに、何らかの理由でRRDTool::OOがインストールされていないことがevalから返されます。
空のファイルを作成して実行すると、次のようになります。
# File foo.pl
use strict;
$| = 1;
use RRDTool::OO;
その後、エラーは発生しません。
しかし、print $ @;を使用して最初のファイルを実行すると、次のように返されます。
Can't locate RRDTool::OO in ...
私は何が間違っているのですか?