ギリシャ・ロシア文字を「欧文扱い」にするスクリプトで、サポートページにも掲載されている次のスクリプトについての話です。
#!/usr/bin/perl # -*- coding: utf-8; mode: cperl; -*- # Cyrillic and Greek to ^^HEX format use utf8; binmode(STDIN, ":utf8"); binmode(STDOUT, ":utf8"); while (<STDIN>) { utf8::decode($_); foreach my $chr (split(//, $_)) { if ((($chr ge "\x{0400}") && ($chr le "\x{04ff}")) || # Cyrillic (($chr ge "\x{0370}") && ($chr le "\x{03ff}")) || # Greek (($chr ge "\x{1f00}") && ($chr le "\x{1fff}"))) { # Greek Ext utf8::encode($chr); # UTF-8 encode foreach my $bchr (split(//, $chr)) { print(sprintf("^^%x", ord($bchr))); } } else { print($chr); } } }
7行目の decode
は不要だと思います。これがあると入力が二重にデコードされてしまいます。