我想检测用户何时缺少所需的模块并打印一条友好的错误消息,说明他们需要安装什么。

到目前为止,我尝试将其放在脚本的开头:

eval {
    use IO::Uncompress::Gunzip qw(gunzip $GunzipError) ;
};
if ($@) {
    die "Error: IO::Uncompress::Gunzip not installed: $@";
}

但是 Perl 似乎死在“使用”行而不是“死”行上,并且从不打印我的错误消息。

最佳答案

这里发生的事情是模块在编译时是 use d,不管它在 eval 块内。

这也是为什么 naab's suggestioneval 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/

10-10 17:51