首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Perl中,如何将某些特定的carps更改为croaks?

在Perl中,如何将某些特定的carps更改为croaks?
EN

Stack Overflow用户
提问于 2010-05-12 18:08:29
回答 2查看 560关注 0票数 1

我试着去抓一条鲤鱼-警告:

代码语言:javascript
运行
复制
 carp "$start is > $end" if (warnings::enabled()); ) 

使用eval {},但它不起作用,所以我查看了eval文档,我发现eval只捕获语法错误、运行时错误或执行的die语句。

我怎么才能捕捉到鲤鱼的警告呢?

代码语言:javascript
运行
复制
#!/usr/bin/env perl
use warnings;
use strict;
use 5.012;
use List::Util qw(max min);
use Number::Range;

my @array;
my $max = 20;
print "Input (max $max): ";
my $in = <>;

$in =~ s/\s+//g;
$in =~ s/(?<=\d)-/../g;

eval {
    my $range = new Number::Range( $in );
    @array = sort { $a <=> $b } $range->range;
};
if ( $@ =~ /\d+ is > \d+/ ) { die $@ }; # catch the carp-warning doesn't work 

die "Input greater than $max not allowed $!" if defined $max and max( @array ) > $max;
die "Input '0' or less not allowed $!" if min( @array ) < 1;
say "@array";
EN

Stack Overflow用户

发布于 2010-05-12 18:56:03

carp不会死,只是打印一个警告,所以不需要使用eval或其他任何东西来捕获。但是,您可以在本地覆盖警告处理程序,以防止将警告发送到stderr:

代码语言:javascript
运行
复制
#!/usr/bin/env perl

use warnings;
use strict;

use Carp;

carp "Oh noes!";

{
    local $SIG{__WARN__} = sub {
        my ($warning) = @_;

        # Replace some warnings:
        if($warning =~ /replaceme/) {
            print STDERR "My new warning.\n";
        }
        else {
            print STDERR $warning;
        }

        # Or do nothing to silence the warning.
    };

    carp "Wh00t!";
    carp "replaceme";
}

carp "Arrgh!";

输出:

代码语言:javascript
运行
复制
Oh noes! at foo.pl line 8
Wh00t! at foo.pl line 25
My new warning.
Arrgh! at foo.pl line 29

在几乎所有的情况下,你应该倾向于修复鲤鱼的原因。

票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2817750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档