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

标签 perl error-handling syntax-error

我正在尝试在 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/

相关文章:

linux - Perl 中的加密解密

perl - 无法识别语法错误

perl - 如何在两行中检查文件是否已成功打开

sql-server - 在SSIS中检索失败的软件包和错误消息

r - 将 tryCatch 与 s3 自定义错误相结合

ruby-on-rails - 单行if-else语句,期望keyword_do

ruby-on-rails - -bash : syntax error near unexpected token

perl - mod_perl2 moose 应用程序的数据库连接过多

javascript - AngularJS:服务器端记录客户端错误

c# - 使用System.Windows;不是名字空间