2

これは、いくつかの UTF8 テキスト ファイルを読み取って解釈するために使用している最小限のプログラムです。

use 5.012;
use utf8;
binmode STDIN, ':utf8';
binmode STDOUT, ':utf8';

while (<>) {
    chomp;
    if ($_ =~ /BOLETIM DE ANÁLISE N/) {print "Boletim\n";}
    if ($_ =~ /DADOS REFERENTES A AMOSTRA/) {print "Dados\n";}
}

入力ファイルには、両方の正規表現を満たす必要がある行が含まれており、TextWrangler を使用して、ファイルが実際に UTF-8 であり、Unix エンドラインを使用していることを確認しました。ただし、プログラムは、アクセント付き文字を含まない 2 番目のもののみを認識します。

(少なくとも私にとって)奇妙なのは、デバッガーで同じ行を実行したときです

    x if ($_ =~ /BOLETIM DE ANÁLISE N/) {print "Boletim\n";}

$_ が string'BOLETIM DE ANÁLISE N° 274734/2011-0 'の場合、正規表現が起動し、「Boletim」が出力されます。

デバッガとプログラムの動作が異なるのはなぜですか?

よろしくお願いします

アドリアーノ

PS 私は Mac Os X 10.7.5 と Perl v5.12.4 を使用しています。

4

1 に答える 1