%_=(62,20,38,1,35,50,33,2,60,10,37,5);s:#*>*<*%*!*&* *:$;=30;$;+=$_{+ord}for split'',$&;chr$;:eg for$_=q: >>!!#><%&&>>>>%>><<<<%&!#<%!#><>>><<&#<<<!&&&&#<<!&& >>>%%&>><<%%%%&&&&!>><#>&>>><<!!>>>%%%&&&!><<<<<&&&& >><<%!>><%%%&&&&#>%&&>>><&>>>>&&&&:;print;{{{[()]}}}

Replies are listed 'Best First'.
Re: The Power Of Regular Expression
by idsfa (Vicar) on Oct 02, 2003 at 03:16 UTC

    s///eg and the hash table disguised as an array, plus basic bamboozling with difficult characters. In a more transparent form ...

    %_=(62 => 20, 38 => 1, 35 => 50, 33 => 2, 60 => 10, 37 => 5); # Match each chunk of optional characters in a specific order # Look up the ASCII values of each char in the chunk in the hash # Add the hash values plus a starting value of 30 # Replace the chunk with the character whose ASCII you just added up # (Pattern modified to add \s* so that chunks could be # formatted prettily) s:#*>*<*%*!*&*\n*\s*: $;=30; $;+=$_{+ord} for split'',$&; chr$; :eg for $_=q:>>!! #><%&& >>>>% >><<<<%& ! #<%! #>< >>><<& #<<<!&&&& #<<!&& >>>%%& >><<%%%%&&&& ! >>< #>& >>><<!! >>>%%%&&& ! ><<<<<&&&& >><<%! >><%%%&&&& #>%&& >>><& >>>>&&&&:; print;

    PS Did you get the idea for hiding the newline from your critique of my JAPH?


    Remember, when you stare long into the abyss, you could have been home eating ice cream.