frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

はいふん☆はいふん。

やったぁ!明日は休めるっ。

しかし体調悪いなぁ。くぅー、ダルくて仕事に集中できへんわ。

普通に生きるにも薬が必要だと、なんでも要領良くこなさないとアカンから

迷走する余力もないから困ったもんだ。

さて、tail -f /xxx/error_log で

常にエラーログを見ながらプログラミングする私ですが。

すると、まぁ、自分が書いたんじゃない所のログまで見かけて

「今のはなんだ?」ってな事もある訳です。

で、最近気になってたのはコレ。

Malformed UTF-8 character (byte 0xff) in eval "string" at (eval xxx) line xxx

なんだろなー…と思いながら、該当しそうなところを探ってみると

どうやらそれが Jcode さんが嘆いていらっしゃるところのようで。

しかしながら、それが全部のJcodeさんが訴えてる訳じゃなくて

特定の箇所で、唸ってるご様子。

ど、どうされました、Jcodeさん?

そこで、ぐーぐる先生に聞いてみると、

「わっしゃっしゃ。それは、ここを見るぞよそー」と教えてくれたのが

hirataraさんの「a geek」の記事

なるなる、ほどほど。

jcode(文字列)->tr(変換して欲しい文字達, 変換後の文字達)てな事をさせると

Jcode の tr ん中で、 tr/変換して欲しい文字達/変換後の文字達/ ってやってて。

sub tr{

my $self = shift;

my $str = ${$self->{r_str}};

my $from = Encode::is_utf8($_[0]) ? $_[0] : decode('euc-jp', $_[0]);

my $to = Encode::is_utf8($_[1]) ? $_[1] : decode('euc-jp', $_[1]);

my $opt = $_[2] || '';

$from =~ s,\\,\\\\,og; $from =~ s,/,\\/,og;

$to =~ s,\\,\\\\,og; $to =~ s,/,\\/,og;

$opt =~ s,[^a-z],,og;

my $match = eval qq{ \$str =~ tr/$from/$to/$opt };

if ($@){

$self->{error_tr} = $@;

return $self;

}

$self->{r_str} = \$str;

$self->{nmatch} = $match || 0;

return $self;

}

そん中でエスケープしてんのが、\ と / なんで

\- って書くと \\- になっちゃうんだね。なるほど。

で、問題の箇所は、エスケープもしてないハイフンが2つが並んでて、

これがコケてた模様。

つまり、変換後の文字達に、うっかり「0-9--」とか「a-z--」とか書くとアウトなっちゃうんで

例えば「a?zー?」を「a-z--」に変換しようとか思っちゃうと

このパターンにハマっちゃうんだね。

てな訳で、その場合は

「ーa?z?」と「-a-z-」とハイフンを2箇所に分けてみたり

「a?zー?」と「a-z-」と、「ー」だろうが「?」だろうが「-」にするようにしちゃうって

設定せなアカンようですわー。