Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 自定义缺少模块消息_Perl_Error Handling_Perl Module - Fatal编程技术网

Perl 自定义缺少模块消息

Perl 自定义缺少模块消息,perl,error-handling,perl-module,Perl,Error Handling,Perl Module,如果找不到我的模块之一,我希望能够向STDERR输出自定义错误消息 据我所知,如果我使用use命令导入模块,那么在执行脚本之前就会发现缺少模块,这对实现我所寻找的结果造成了重大问题 基本上,我要寻找的是一个与Python中捕获ImportError异常相当的Perl。要捕获Perl中的异常,应该使用eval操作符。如果传递给eval的代码失效,那么错误消息将被放入$@中,供您随意使用 它看起来像这样 use strict; use warnings; use 5.010; BEGIN {

如果找不到我的模块之一,我希望能够向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 "$1 isn't installed";
    }
    else {
      die $@;
    }
  }
}

say 'Continuing...';
输出


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

它看起来像这样

use strict;
use warnings;
use 5.010;

BEGIN {

  eval 'use Xyz';

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

say 'Continuing...';
输出

您可以使用@INC钩子执行以下操作:

BEGIN { push @INC, sub { Carp::croak "Couldn't find $_[1]" } }
use Xyz;
您可以使用@INC钩子执行以下操作:

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

那不是我写的。你需要使用“MyModule”我的旧评论不再有效,它是针对你答案的前一个版本的。不管怎么说,它很有效,谢谢你。这不是我写的。你需要使用“MyModule”我的旧评论不再有效,它是针对你答案的前一个版本的。不管怎样,它很有效,谢谢你。