答えがhereであるため、perlモジュールがインストールされているかどうかを検証しようとしています。このため は、私が持っている:スクリプト内にperl modが存在するかどうかのテスト
# &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 ([email protected]) {
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;
をその後、私はエラーを取得していません。
しかし、私は;,印刷$ @を持つ最初のファイルを実行すると、それが返されます:私は間違って
Can't locate RRDTool::OO in ...
何をしているのですか?あなたは何が起こっている
if (eval("require xxx;")) {
print "you have it\n";
} else {
print "you don't\n";
}
そして、 "require"に関するドキュメントをチェックすると、引用符がこの場合に役立つ理由を知ることができます:http://perldoc.perl.org/functions/require.html – oalders
パーフェクト、ありがとう! –
@oaldersはい、私は "正しかった"と書かれたxxxについて考えました。(それは自分自身に何があるかを問わず):evalが成功するかどうかをチェックする方法を指していました。 – ShinTakezou