http://qs1969.pair.com?node_id=27510


in reply to RE: RE: RE: Checking to see if a particular Module is installed
in thread Checking to see if a particular Module is installed

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:
package GD; sub BIGFONT () { 35 }
Your code would cause this to be misparsed:
my $result = BIGFONT + 3;
because without the empty prototype, BIGFONT 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.

So, to fix this, wrap my code in a BEGIN block, like so:

my $have_GD = 0; BEGIN { eval { require GD }; unless ($@) { GD->import(); $have_GD = 1; } }
Your code does OK without considering prototypes. You haven't been burned, but I'd add the word "yet" there.

-- Randal L. Schwartz, Perl hacker


update: Get rid of the "= 0" on the intialization. Sorry.