use Unicode::String qw(utf8 ucs2);
...
$result =~ s/?(\d+);/ucs2(pack('n', $1))->utf8/eg;

こういうことかしらん。