in reply to Unicode Conversion

What you got was not a "compilation error" -- the code snippet compiles just fine. You got a "run-time error", which (as the name implies) only happens when you try to run the script.

If you want to replace any character whatever with its hex-numeric entity reference, you can do it like this:

my $num_ent_chars = "()"; # add other characters as needed, but ^ - [ + ] are special $data =~ s/([$num_ent_chars])/sprintf("&#x%4x;",ord($1))/ge;
Since the string contained in $num_ent_chars is being used inside square brackets in the regex (to define a character class), most of the regex-magic meanings for things like ".", "*", "?", "+" etc do not apply. You just need to be careful when the character class has to include square brackets, hyphen and caret -- either escape these with "\", or place them carefully -- for example:
perl -le '$_="me [ and ] you ^ and - him"; $c="][^-"; s/[$c]/xxx/g; + print'
will print "me xxx and xxx you xxx and xxx him".