It's kinda hard to see but I included the /x switch because
I inserted blanks on the pattern as well as the replacement
side. Without /x, the match will fail.
$str =~ s{ ([^[:print:]]) }{ sprintf( "(%#2X)", ord $1) }gex;
^ ^
On Tue, Sep 6, 2016 at 1:06 PM, Uri Guttman <[email protected]> wrote:
> On 09/06/2016 03:59 PM, X Dungeness wrote:
>>
>> $str = "ab\rcd\nef\ngh\fij";
>>
>> $str =~ s{ ([^[:print:]]) }{ sprintf( "(%#2X)", ord $1) }gex;
>>
>> ----> ab(0XD)cd(0XA)ef(0XA)gh(0XC)ij
>>
>>
> that is a nice use of /e (don't think you need /x when you already have /e
> as code can handle blanks. but the # comment feature is enabled with /x.).
> but the other answers had a nice optmization. they built the hash of numbers
> to hex strings so their replacement only did a hash lookup and they don't
> even need /e to work. that is a basic caching optimization that newbies can
> learn to use. this is a good case to see the coding differences. as an
> exercise, some of you could even write up a benchmark comparing them. post
> your results to this thread.
>
> thanx,
>
> uri
>
>
>
> --
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> http://learn.perl.org/
>
>
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/