SPUG:inconsistant perl -c

Colin Meyer cmeyer at helvella.org
Thu Jan 30 15:40:14 CST 2003


On Thu, Jan 30, 2003 at 10:52:19AM -0800, Brian Hatch wrote:
> 
> 
> Contents of BriOne.pm:
> 	use Apache;
> 	use BriTwo;
> 
> 
> Contents of BriTwo.pm:
> 	use Apache;
 
        # to see what is happening:
        print STDERR "about to execute \$s = Apache->server();\n";

> 	my $s = Apache->server();
> 
> 
> $ perl -c BriTwo
> BriTwo Syntax OK
> 
> $ perl -c BriOne
> Can't locate object method server via package Apache (perhaps you forgot 
>     to load 'Apache'?) at BriOne.pm line 3.
> Compilation Failed in require at BriOne line 3
> BEGIN failed.
> 

'perl -c ' executes use statements, because they are effectively
equivalent to BEGIN {} blocks. When you 'perl -c BriOne', it executes
BriTwo.pm, and tries at that time to instantiate $s by calling
Apache->server(). Unfortunately, this call does not work when running
outside of the true mod_perl environment (from within httpd).

> 
> How can I make that second perl -c not complain?  It shouldn't.  At
> least I don't think it should.

One way to avoid that error would be to change in BriTwo:
  my $s = Apache->server();

to:
  my $s;
  sub instantiate {
    $s = Apache->server();
  }

and manually call BriTwo::instantiate from BriOne.

hth,
-Colin.



More information about the spug-list mailing list