我有一个简单的打印脚本
my $pdf_data = $agent->content;
open my $ofh, '>:raw', "test.pdf"
or die "Could not write: $!";
print {$ofh} $pdf_data;
close $ofh;
Run Code Online (Sandbox Code Playgroud)
有时我得到"宽字符警告",我知道为什么我收到这个并且希望能够取消打印而不是打印损坏的故障.就像是
if(wideCharWarning)
{
delete "test.pdf"
}
else{
print {$ofh} $pdf_data;
}
Run Code Online (Sandbox Code Playgroud)
你指定你打印字节(:raw),但你不是.
$ perl -we'
open(my $fh, ">:raw", "file") or die $!;
for (0..258) {
print "$_\n";
print $fh chr($_);
}
'
...
249
250
251
252
253
254
255
256
Wide character in print at -e line 5.
257
Wide character in print at -e line 5.
258
Wide character in print at -e line 5.
Run Code Online (Sandbox Code Playgroud)
要"取消打印",您只需检查打印的内容是否包含非字节.
die if $to_print =~ /[^\x00-\xFF]/;
Run Code Online (Sandbox Code Playgroud)
如果你想检测你的字符串是否包含宽字符,你可以使用这样的正则表达式:
/[^\x00-\xFF]/;
Run Code Online (Sandbox Code Playgroud)
(正如ikegami在下面提到的,我的第一个建议不合适:/[^[:ascii:]]/;会产生误报)