ギリシャ・ロシア文字を「欧文扱い」にするスクリプトで、サポートページにも掲載されている次のスクリプトについての話です。
#!/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 は不要だと思います。これがあると入力が二重にデコードされてしまいます。