in reply to Roman has saved my bacon several times. The best was when I had to replace translation lists marked a, b, c, ... with i, ii, iii, ...

Roman did exactly what I needed. Trivial example:

use Roman; while (<DATA>) { chomp; last if (/^$/); my ($key, $data) = split(/\s+/, $_, 2); $key =~ s/([a-z])/roman(1+ord($1)-ord('a'))/eg; print join("\t", $key, $data), "\n"; } exit; __DATA__ a Johan b Gambolputty c von Haukopft d-y (much deleted) z of Ulm

which gives:

i Johan ii Gambolputty iii von Haukopft iv-xxv (much deleted) xxvi of Ulm

Not bad for so litle code and effort, eh?

foreach(split('',"\3\3\3c>\0>c\177cc\0~c~``\0cc\177cc")) {$_=unpack('B8',$_);tr,01,\40#,;print$_,"\n";}##IYDKINT!