Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re: Code that writes code

by chipmunk (Parson)
on Dec 22, 2000 at 22:46 UTC ( [id://48066]=note: print w/replies, xml ) Need Help??


in reply to Code that writes code

I have a script that generates code which is evalled later on in the script. I had several reasons for this approach.

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:

# code to match the stress regex $eval .= <<" EOT"; next unless /\$stress[$i]/o; EOT
Second, I'm using conditionals to generate different code, depending on various options:
if (defined $stress[$i]) { # 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:
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 } }
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.

I also have an option that prints the generated code before it is evalled, to aid in debugging.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://48066]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others perusing the Monastery: (5)
As of 2024-04-16 13:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found