小编Pun*_*ngs的帖子

Perl sigdie处理程序和eval

我在我的Logger模块中覆盖了我的SIG模具处理程序.

# Catch die messages and log them with logdie
$SIG{__DIE__} = \&logdie;
Run Code Online (Sandbox Code Playgroud)

现在,程序按预期运行,将调用后处理.

use strict;
use warnings;
use File::Path;
# use MyLogger;

my $dir="/random";
eval {
  # local $SIG{__DIE__};
  File::Path::make_path($dir);
};
if($@) {
 warn("Cannot create $dir :$@ \n");
}
print "Post processing \n";
Run Code Online (Sandbox Code Playgroud)

但是,如果我包含我的记录器模块并且use MyLoggereval语句中添加代码失败,则出现以下错误,并且不会调用后处理.

[错误] 2015/04/27 22:19:07 Carp.pm:166> mkdir/random:在./test.pl第11行被拒绝.

修复此问题的一个选项是添加本地sigdie句柄(如注释代码所示).

但是,我的记录器模块被许多脚本使用.

有没有办法修改我的Logger模块,以便在从eval块内部调用时它会抑制ERROR消息?

perl eval log4perl

3
推荐指数
1
解决办法
267
查看次数

如何使用Perl的'sprintf'删除前导零

如何使用sprintf而不是0.500 打印一半为.500 ?

以下两个陈述均为0.500.

my $half = 1/2;

print sprintf("%0.3f\n", $half);
print sprintf("%.3f\n", $half);
Run Code Online (Sandbox Code Playgroud)

perl

1
推荐指数
1
解决办法
1257
查看次数

标签 统计

perl ×2

eval ×1

log4perl ×1