First, the generated code has several variable regexes, which may change during the life of the script, but not during one execution of the evalled code. For example:
Second, I'm using conditionals to generate different code, depending on various options:# code to match the stress regex $eval .= <<" EOT"; next unless /\$stress[$i]/o; EOT
And third, I'm using loops to generate repeated blocks of code:if (defined $stress[$i]) { # code to match the stress regex $eval .= <<" EOT"; next unless /\$stress[$i]/o; EOT }
Generating code and then executing it with eval makes the code more efficient; the various conditionals are executed once overall, rather than once per line of input; and the regexes are only compiled once per execution, rather than once per match.for (my $i=0; $i<=$#entry; ++$i) { # ... if (defined $stress[$i]) { # code to match the stress regex $eval .= <<" EOT"; next unless /\$stress[$i]/o; EOT } }
I also have an option that prints the generated code before it is evalled, to aid in debugging.
In reply to Re: Code that writes code
by chipmunk
in thread Code that writes code
by Ovid
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |