はいふん☆はいふん。
やったぁ!明日は休めるっ。
しかし体調悪いなぁ。くぅー、ダルくて仕事に集中できへんわ。
普通に生きるにも薬が必要だと、なんでも要領良くこなさないとアカンから
迷走する余力もないから困ったもんだ。
さて、tail -f /xxx/error_log で
常にエラーログを見ながらプログラミングする私ですが。
すると、まぁ、自分が書いたんじゃない所のログまで見かけて
「今のはなんだ?」ってな事もある訳です。
で、最近気になってたのはコレ。
Malformed UTF-8 character (byte 0xff) in eval "string" at (eval xxx) line xxx
なんだろなー…と思いながら、該当しそうなところを探ってみると
どうやらそれが Jcode さんが嘆いていらっしゃるところのようで。
しかしながら、それが全部のJcodeさんが訴えてる訳じゃなくて
特定の箇所で、唸ってるご様子。
ど、どうされました、Jcodeさん?
そこで、ぐーぐる先生に聞いてみると、
「わっしゃっしゃ。それは、ここを見るぞよそー」と教えてくれたのが
なるなる、ほどほど。
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-」と、「ー」だろうが「?」だろうが「-」にするようにしちゃうって
設定せなアカンようですわー。