Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

Re^2: Efficient code.

by Aristotle (Chancellor)
on Jan 30, 2006 at 17:55 UTC ( #526504=note: print w/replies, xml ) Need Help??

in reply to Re: Efficient code.
in thread Efficient code.

400 alternations is manageable, but don’t forget the match is executed 50,000 times.

Regexp::Assemble helps by reducing the necessary backtracking, but don’t forget that Regexp::Assemble itself doesn’t work by magic and will need to do a fair amount of string munging. Most likely, that effort is easily amortised during the actual tests, but you don’t know that yet. Then the question that remains is how similar the lines are; if they all differ greatly, then Regexp::Assemble can’t do much.

Without benchmarks I wouldn’t go on the record with any prediction as to what’s going to be faster.

And the problem that the code does not match intention closely remains. The hash-based approach will be trivial to get right, and it will be much easier to understand in six months.

Makeshifts last the longest.

Replies are listed 'Best First'.
Re^3: Efficient code.
by demerphq (Chancellor) on Jan 30, 2006 at 18:23 UTC

    Juts FYI: In Perl 5.10 alternations not containing regex metachars will not backtrack at all as they are represented by a trie node that can traverse all of the alternations in a single pass. Id say which version of perl contains this but embarrasingly I appear to have forgotten.



      Old geezer moment: sometimes these optimisations make me feel like I did when I was writing assembly code (inner loops of texture mappers slinging pixels… unrolling carefully, rejoicing when a clever trick got your loop down from 11 to 9 cycles per pixel – those were the days) and went from Pentium to PentiumPro – suddenly it was no longer possible to measure how many clock cycles any one instruction took: an innocuous change somewhere up or down the line would sometimes dramatically change the time response of an unrelated instruction, occasionally a loop iteration would randomly take more or less cycles than average, and sometimes instructions would appear to take a fractional amount of cycles. It was like wading through quicksand.

      Of course, there was no way to inspect the result of the PPro’s µ-Op translator. Thank goodness for use re 'debug'; :-)

      Makeshifts last the longest.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://526504]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (3)
As of 2018-04-23 18:13 GMT
Find Nodes?
    Voting Booth?