2013-03-13 38 views
1

我有簡短的腳本test.pl如何禁止Getopt :: Std :: getopts發出的警告消息?

#!/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:信息,而只得到標準錯誤礦TRALALALALA。

+0

from reading getopts source如果不重寫'CORE :: warn'或安裝警告處理程序,這是不可能的。 – user1937198 2013-03-13 18:16:23

+2

'Getopt :: Long'有一個'pass_through'設置,它禁止'Unknown option:'消息。 – toolic 2013-03-13 18:43:17

回答

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"); 
} 
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';