Like
tommyw and
scain said, you have to escape the backslash. Also, I don't think \d matches hex digits 'A'-'F'. If you need to match those (looks like you do from the sprintf), you can use [[:xdigit:]] instead.
s/\\x([[:xdigit:]]+)/''.hex($1).';'/eg
Btw, if you only want 2 digits (so that stuff like "\x92Efficiency" doesn't confuse the regex), use {2} instead of +. If you want to match one or two, use {1,2}. You're probably better off matching an exact number rather than a range though if you can.
s/\\x([[:xdigit:]]{2})/''.hex($1).';'/eg
Hope this helps!
Update: Oops, I just read your reply to tommyw above. All you need is a range, combined with ord (not hex).
s/([\x80-\xFF])/''.ord($1).';'/eg