I am trying to find my way around Unicode in perl. I want my scripts to have correct output no matter if they are called on latin1 or on utf8 terminals. I have already found the incredible useful
use open OUT => ':locale'. However, I'm having trouble with commandline arguments. Is there a more sensible way than to do it this way:
use charnames ':full';
use open ':locale';
use Encode;
for (PerlIO::get_layers(STDOUT)){
if (/encoding\((.*)\)/ || /(utf8)/ ){
$lc||=$1;
}
}
print "Locale is: $lc\n";
$_="@ARGV"; $_=decode($lc,$_);
$_=~s<([^\x{000a}\x{0020}-\x{007e}])>{
'\N{'.charnames::viacode(ord $1).'}'
}ge;
print $_,"\n";
This seems overly ugly, just to get perl to do the right thing.