> "\d"は使わず"[0-9]"を使えとか

perl 以外でも使える正規表現を優先して使わせようと思っているのかもね。

>「この部分を47までと48以降で分けてサブルーチンにしろ。

$string =~ s/(?<![0-9])([1-3][0-9]|4[0-7])(?![0-9])/&sub1($1)/sge;
$string =~ s/(?<![0-9])(4[89]|[5-9][0-9]|1[0-4][0-9])(?![0-9])/&sub2($1)/sge;

とでもしろってことでしょう。

$string =~ s/(?<![0-9])(1[0-4][0-9]|[1-9][0-9])(?![0-9])/"\xf4" . chr(0x4f + $1 + ($1 >= 0x30))/sge;

の方が速いと思うが。

> /gは遅くなるからダメ」と言われました。頭の中は?が飛んでます。

その上司本当に Perl 知ってるのかな? 複数個所の in-place replace をす
るなら /g が一番速いんだが。他にも while で回す、split+map を使う等い
ろいろ方法はあるけど、特殊な条件下でないと /g より速くなることはない。

なんというか、聞いていて不安だ。