我有短脚本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。
答案 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';