3

簡単な印刷スクリプトがあります

my $pdf_data = $agent->content;
open my $ofh, '>:raw', "test.pdf"
or die "Could not write: $!";
print {$ofh} $pdf_data;
close $ofh;

「ワイド文字の警告」が表示されることがありますが、これを受け取る理由がわかっているので、破損した失敗を印刷する代わりに、印刷をキャンセルできるようにしたいと考えています。何かのようなもの

if(wideCharWarning)
{
delete "test.pdf"
}
else{
print {$ofh} $pdf_data;
}
4

3 に答える 3

6

文字列にワイド文字が含まれているかどうかを検出する場合は、次のような正規表現を使用できます。

/[^\x00-\xFF]/;

(池上が以下に記しているように、私の最初の提案は大丈夫ではありませんでした:/[^[:ascii:]]/;誤検知を生成します)

于 2012-05-03T18:51:24.767 に答える
5

バイト(: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.

「印刷をキャンセル」するには、印刷するものに非バイトが含まれていないことを確認するだけです。

die if $to_print =~ /[^\x00-\xFF]/;
于 2012-05-03T18:49:21.633 に答える
1

シグナルハンドラを設定__WARN__し、警告メッセージに基づいてやりたいことを何でもすることができます。

my $wideCharWarningsIssued = 0;
$SIG{__WARN__} = sub {
    $wideCharWarningsIssued += "@_" =~ /Wide character in .../;
    CORE::warn(@_);     # call the builtin warn as usual
};

print {$ofh} $data;
if ($wideCharWarningsIssued) {
    print "Never mind\n";
    close $ofh;
    unlink "test.pdf";
}
于 2012-05-03T18:51:49.417 に答える