如何禁止Getopt :: Std :: getopts发出的警告消息?

时间:2013-03-13 18:10:33

标签: perl silent getopts

我有短脚本test.pl

#!/usr/bin/perl
use locale;
use encoding 'utf-8';

use Getopt::Std;

getopts("dei") or print STDERR "TRALALALALA\n"; 
print"@ARGV\n";

我需要抑制getopts生成的Unknown option:消息,并且只在stderr上获取我的TRALALALALA。

2 个答案:

答案 0 :(得分:6)

{
    local $SIG{__WARN__} = sub { };  # Supress warnings
    getopts("dei")
        or print STDERR "TRALALALALA\n";
}

或者您甚至可以在警告处理程序中嵌入“TRALALALALA”:

{
    local $SIG{__WARN__} = sub { print STDERR "TRALALALALA\n" };
    getopts("dei");
}

答案 1 :(得分:0)

您也可以本地化*::STDERR并将其打开到块中的缓冲区,如下所示:

@ARGV = qw(-i -a -g);
{   open( local *STDERR, '>', \(my $stderr)) 
        or warn( 'Could not open to string!' )
        ;
    getopts( 'ig' );
    say '$stderr=' . $stderr;
}

print STDERR 'STDERR => out';