我想检测用户何时缺少所需的模块并打印一条友好的错误消息,说明他们需要安装什么。
到目前为止,我尝试将其放在脚本的开头:
eval {
use IO::Uncompress::Gunzip qw(gunzip $GunzipError) ;
};
if ($@) {
die "Error: IO::Uncompress::Gunzip not installed: $@";
}
但是 Perl 似乎死在“使用”行而不是“死”行上,并且从不打印我的错误消息。
最佳答案
这里发生的事情是模块在编译时是 use
d,不管它在 eval
块内。
这也是为什么 naab's suggestion 从 eval BLOCK
形式更改为 eval EXPR
形式也有效的原因;表达式在运行时计算。
将 use
更改为 require
将尝试在运行时加载模块:
eval {
require IO::Uncompress::Gunzip;
IO::Uncompress::Gunzip->import( qw/gunzip $GunzipError/ ) ;
};
if ($@) {
die "Error: IO::Uncompress::Gunzip not installed: $@";
}
输出
关于Perl - eval 不捕获 "use"语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11020911/