自定义缺少模块消息
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;
如果找不到我的模块之一,我希望能够向 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;