s/(..)/chr(hex($1))/ge; # convert 0x77 0x00 -> w^@
####
s/(....)/chr(hex($1))/ge # convert 0x7700 -> ç\234\200
##
##
# stolen from Data::Dumper and tweaked.. ;-)
sub narrow_char {
return join('',
map {chr(hex $_)}
map{
(my $s = sprintf("%x",ord($_)))=~s/00$//;
$s;
} split//,$_[0]
);
}
my %info = (
'CreationDate',
'D:20060817180621+01\'00\'',
'Producer',
"\x{4f00}\x{7000}\x{6500}\x{6e00}\x{4f00}\x{6600}\x{6600}\x{6900}\x{6300}\x{6500}\x{2e00}\x{6f00}\x{7200}\x{6700}\x{2000}\x{3200}\x{2e00}\x{3000}",
'Creator',
"\x{5700}\x{7200}\x{6900}\x{7400}\x{6500}\x{7200}",
'Author',
"\x{4200}\x{6f00}\x{6200}\x{2000}\x{5700}\x{6500}\x{6200}\x{7300}\x{7400}\x{6500}\x{7200}",
'Title',
"\x{4300}\x{4f00}\x{4d00}\x{5000}\x{4500}\x{5400}\x{4900}\x{5400}\x{4900}\x{5600}\x{4500}\x{2000}\x{5300}\x{4100}\x{4600}\x{4100}\x{5200}\x{4900}",
);
foreach my $key (sort keys %info) {
print "$key -> ";
print narrow_char($info{$key});
print "\n";
}
__END__
# output:
Author -> Bob Webster
CreationDate -> D:20060817180621+01'00'
Creator -> Writer
Producer -> OpenOffice.org 2.0
Title -> COMPETITIVE SAFARI
##
##
sub narrow_char {
$_[0] =~ s/(.)/chr(ord($1)>>8)/eg
if (length($_[0]) * 3 == do { use bytes; length $_[0] } );
$_[0];
}