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