Yes, I am sure that I am not getting the translation in my code since
Well compare your 1st substitution with mine, yours has \\N{...} which is not the same as \N (a \ escapes a \ so \\ means a literal \)
your second substitution maybe looks broken by perlmonks only supporting latin-1 charset
s/&/\$&/g; is that what you had?
your third substitution attemps to replace raw utf bytes representation of that unicode code points .. which might work if you're dealing with bytes/octets in your string but you're dealing with unicode codepoints not their byte representations ( perlunitut, perlunitut: Unicode in Perl ) probably a2p eval eval eval stuff
Basically, way too much eval/interpolation/eval/indirection going to , too much overlap to reason about , too much stuff to visually compare
notice my example, very short, deals with one small string , and naturally works ;; copy my example :)
so my suggestion, stop doing too many operations in one (assign, concatenate , and substitute .. forget an eval )
Only deal with one string, one operation, one DDumper, ... final operation (substitution) final DDumper, end of program -- do a ddumper after every operation so you can notice the changes in the byte representations
:)
Your use of curly braces as quoting characters in your example is a little bit confusing to me. Won't simple slashes do just as well in your example? Or is there some other subtle reason to use the braces instead?
There is no subtle reason other than habit -- I often start by typing my examples on the commandline ( cmd.exe ) so I avoid ' and " because of that -- and I avoid qq[] because of perlmonks (thats how you link on perlmonks ), and I avoid // so it doesn't look like m/// or s/// ... I really don't think about it much and I switch between all these between the hours of the day ... but {} is used for a lot of things in a lot of programming languages, so force of habit forces {} ... speaking of habits () is used even more but it always kinda irks me being up there above {} :D
Does that mean that the variable $s_ is "eval"ed twice?
No, its evaled "once" (for each match)
s{regex}{string} means replace that matched by regex with string
s{regex}{code}e means replace that matched by regex with result of code; the e in s///e tells the s///ubstitution operator that the s//STUFFHERE/e is code and not a string
s//STUFFHERE/e means treat stuffhere string as code
two ee-s in s//STUFFHERE/ee means treat stuffhere string as code, and treat the return value of that code as code
s//code/ee means s//eval code/e
And if that is true, why is it done that way?
Its an implementation detail -- simplest way to cover all possibilities ; a2p is a c program that parses awk programs and prints out perl programs ;; its computer generated code ( using byacc Compiler-compiler)
Like I said earlier, not a great way to learn perl ... great as a foothold for switchover from awk, but not a substitute for perlintro
In reply to Re^3: Global substitution of non-base-plane Unicode characters
by Anonymous Monk
in thread Global substitution of non-base-plane Unicode characters
by pjfarley3
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |