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.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.