Rob Dixon writes:

 > Tom Kinzer wrote:

 > I didn't think it was slick at all. In fact I was disappointed that 
 > it looked such a mess, but I don't see a better way.

Yes, it is indeed a mess, not only syntacticly, but also semantically.
While it might make a good teaching example to show what you can do in
a perl regex, it might not be a very good way to do what is ultimately
accomplished.

First, a regular expression pattern match is conducted to find all
chars in the string that are in the desired "special processing"
range.  Note that these are each individual characters, not
substrings, so the regex match is gross overkill from a computational
complexity point of view.

Second, all that is desired is to insert a circumflex and then the
character plus a bias to make it printable.

Now if this is all that has to be done, and you want to do it to a
bunch of large files, then the way you show is a poor way to do it.  A
simple C program could be written to get a character from stdin, check
it in an "if" statement to see if it is in the desired range, and then
output the circumflex followied by the biased character to stdout if
it is in the range, or else just output the character.  This simple
one-char-at-a-time streaming filter approach would be considerably
simpler computationally than the method you provide.

Now if you only need to do this to massage a few lines of output in a
program with a much larger overall purpose, then perhaps your example
is the way to go.

My question is, how does perl's regex compiler handle the code you
gave?  Does it optimize it to a similar level of complexity as my C
example, or does it smash it with a one-size-fits-all regular
expression engine?  I know regular expressions can be highly optimized 
at compile time, so this is an important question.  If the regex is
sufficiently optimized, then it would always be the way to go.

Bob "Rj" Brown

-- 
--------  "And there came a writing to him from Elijah"  [2Ch 21:12]  --------
R. J. Brown III  [EMAIL PROTECTED] http://www.elilabs.com/~rj  voice 847 543-4060
Elijah Laboratories Inc. 457 Signal Lane, Grayslake IL 60030  fax 847 543-4061
-----  M o d e l i n g   t h e   M e t h o d s   o f   t h e   M i n d  ------

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to