die函数与use函数一起使用时会产生语法错误

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)

如何调整以获得所需的效果?

Gri*_*nnz 8

使用的语句是特殊的,它不工作像一个函数调用。它与大多数语句不同,它在编译时执行,并使用唯一的语法分析语句的其余部分-即模块名称必须是裸字,其后可以是可选的模块版本,后跟参数列表。

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轻松安装它们