自定义缺少模块消息

Custom missing module message

如果找不到我的模块之一,我希望能够向 STDERR 输出自定义错误消息。

据我了解,如果我使用 use 命令导入模块,则会在执行脚本之前发现缺少模块,这会对实现我正在寻找的结果造成重大问题。

基本上我正在寻找的是在 Python.

中捕获 ImportError 异常的 Perl 等价物

要在 Perl 中捕获异常,您应该使用 eval 运算符。如果传递给 eval 的代码死了,那么错误消息将被放入 $@ 中,供您随意使用。

看起来像这样

use strict;
use warnings;
use 5.010;

BEGIN {

  eval 'use Xyz';

  if ( $@ ) {
    if ( $@ =~ /Can't locate (\S+)/ ) {
      warn " isn't installed";
    }
    else {
      die $@;
    }
  }
}

say 'Continuing...';

输出

Xyz.pm isn't installed at E:\Perl\source\trap use.pl line 9.
Continuing...

您可以使用 @INC 挂钩来执行此操作:

BEGIN { push @INC, sub { Carp::croak "Couldn't find $_[1]" } }
use Xyz;