in reply to Slow Regex - How to Optimize

I would use a different approach, i.e. make a single string from your @sub_code and apply the search for each key just once.

#untested my $code = join("", @sub_code); foreach my $sub ( keys %SUBS ) { while ( $code =~ /\b$sub\b\(/g ) { push( @subs, $sub ) ; } }

Notice that your code has a subtle bug. If the same routine is used twice in oone line, you'll get it only once. E.g.:  sqrt(x) + sqrt(y)

BTW, what is that $key in your code?

Replies are listed 'Best First'.
Re^2: Slow Regex - How to Optimize
by Anonymous Monk on Aug 30, 2005 at 23:16 UTC
    Notice that your code has a subtle bug.
    Even if he is running the code through CPP first (to strip out comments, expand macros, rejoin lines), he still has plenty of corner cases to worry about (strings, fucntion pointers, etc)...
    #define p printf int mai\ n/*this is a comment: main()*/(int argc, char **argv) { int (*f)(int, char **) = &main; p("hello world: main()\n"); if(argc>0) f((argc-1),argv); }
      Oh, and don't forget that [^a-zA-Z] matches "(" and that C identifiers can have digits and underscores...
      _foo2bar((4),2);