note
merlyn
Your code fails to import prototypes early enough (at compile time) to influence
the proper parsing of the later code. For example, say a constant was defined
in GD as:
<code>
package GD;
sub BIGFONT () { 35 }
</code>
Your code would cause this to be misparsed:
<code>
my $result = BIGFONT + 3;
</code>
because without the empty prototype, <tt>BIGFONT</tt> is a normal subroutine,
and the +3 will be parsed as an argument to the subroutine. With the prototype,
we get the proper behavior (and even compile-time constant folding). So, with
compile-time importing, we get 38 for the answer, and without, we get 35.
<p>
So, to fix this, wrap my code in a BEGIN block, like so:
<code>
my $have_GD = 0;
BEGIN {
eval { require GD };
unless ($@) {
GD->import();
$have_GD = 1;
}
}
</code>
Your code does OK without considering prototypes. You haven't been burned,
but I'd add the word "yet" there.
<p>-- <a href="http://www.stonehenge.com/merlyn/">Randal L. Schwartz, Perl hacker</a></p>
<hr>
<b>update:</b> Get rid of the "= 0" on the intialization.
Sorry.
27443
27507