我有一个Perl程序,它给了我以下输出:
Wide character in print at foo.pl line 139, <FILE> line 1.
Wide character in print at foo.pl line 139, <FILE> line 2.
Wide character in print at foo.pl line 139, <FILE> line 3.
因为我不想添加:utf8
层,也不想关闭警告,所以如果出现上述消息,我正在寻找一种方法来终止程序并使用错误代码退出。
由于print
语句是抛出错误的语句,我试图在print
语句旁边使用or die
,但这没有帮助。例如:>
print OUTPUT $_."n" or die "Something wrong happened - $!";
我想这是不工作,因为print
不是真的失败-它只是显示一个消息。
你要找的是:
use warnings FATAL => 'utf8';
这将导致任何"宽字符"警告是致命的,并导致Perl进程死亡。
例如:#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use feature 'say';
for (1 .. 3) {
say "παν γράμμα";
}
say "=" x 80;
use warnings FATAL => 'utf8';
for (1 .. 3) {
say "παν γράμμα";
}
输出:
alex@kyon:~$ ./fatal_wide.pl
Wide character in say at ./fatal_wide.pl line 9.
παν γράμμα
Wide character in say at ./fatal_wide.pl line 9.
παν γράμμα
Wide character in say at ./fatal_wide.pl line 9.
παν γράμμα
================================================================================
Wide character in say at ./fatal_wide.pl line 17.
并以非零退出状态退出:
alex@kyon:~$ echo $?
255
您需要像这样捕获Perl警告:
local $SIG{__WARN__} = sub {
my $mes = shift;
die $mes;
};
如果消息匹配,您可以提供自定义warn
处理程序,然后die
:
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
local $SIG{__WARN__} = sub {
my $msg = shift;
die $msg if (index $msg, "Wide character in print") > -1;
warn $msg;
};
warn "test warn";
print "鸡n";
warn "won't reach";
生产:
test warn at foo.pl line 17.
Wide character in print at foo.pl line 18.