我正在尝试在 Perl 中创建一个备份系统。最终,我想与世界分享它。但我想确保人们安装了正确的模块,所以我想进行一些异常处理,以防他们没有正确的模块。具有讽刺意味的是,当我在以下情况下使用 die 函数时会产生语法错误:
use strict; use warnings;
use Tk or die "You don't have the Tk module installed."
如何调整它以获得所需的效果?
最佳答案
use语句很特殊,它不像函数调用那样工作。与大多数语句不同,它在编译时执行,并使用独特的语法解析语句的其余部分 - 即模块名称必须是裸字,然后可以是可选的模块版本,后跟参数列表。
只需 use Tk;
如果没有找到 Tk 就会抛出异常,你不需要自己做任何检查。如果要自定义错误消息,可以在运行时语句中使用 require 加载它。并捕获异常,但您应该真正包含 @INC
的内容或包含该错误消息的原始错误消息,用于调试应在何处找到模块:
use strict;
use warnings;
BEGIN {
unless (eval { require Tk; Tk->import; 1 }) {
die "You don't have the Tk module installed: $@";
}
}
CPAN 发行版的依赖项在元数据中指定,并由发行版的配置脚本指定,这可确保在用户尝试使用 CPAN 客户端安装您的发行版时安装它们。见 http://blogs.perl.org/users/neilb/2017/05/specifying-dependencies-for-your-cpan-distribution.html .对于在 CPAN 之外分发的代码,cpanfile提供一种指定依赖关系的格式,用户可以使用 cpanm 轻松安装.
关于perl - die 函数与 use 函数一起使用时会产生语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56797943/