$char_lpar and $char_rpar get interpolated inside your substitution. You can quote them using the \Q\E construct:
$data =~ s/\Q$char_lpar\E/sprintf("%.4x;", $decval_1)/ge;
$data =~ s/\Q$char_rpar\E/sprintf("%.4x;", $decval_2)/ge;
-- Frank | [reply] [d/l] [select] |
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".
| [reply] [d/l] [select] |
I am regularly getting the compilation error in it.
There's a good reason why error message don't just say "An error happened!". Why don't you tell us what error you are getting.
That said, haoess already identified a major source of error.
| [reply] |