"KEVIN ZEMBOWER" <[EMAIL PROTECTED]> writes:

> In diagnosing a problem, I've discovered that this program:
> #!/usr/local/bin/perl
> use CGI qw/:standard/;
> use LWP::Simple ;
> 
> causes this error:
> Prototype mismatch: sub main::head vs ($) at ./z.pl line 3
> 
> If I change the program to:
> #!/usr/local/bin/perl
> use CGI;
> use LWP::Simple ;
> 
> the error goes away.
> 
> Does this mean you can't mix styles (function-oriented vs. object-oriented) in the 
>same program?

It means that CGI and LWP::Simple try to export the same function.
You get the warning printed because the prototype of the exported
functions does not match.

The workaround is to be more explicit in what functions you import.

   use CGI qw/:standard/;    # imports &head and a bunch of others
   use LWP::Simple qw(get);  # avoids importing &head

or if you actually want the head function from LWP::Simple and still
want to import all the :standard functions:

   use CGI qw/:standard/;
   use LWP::Simple ();       # don't import anything
   *lwp_head = \&LWP::Simple::head   # manual import (with renameing)

   # head() calls CGI's head
   # lwp_head() calls LWP's head

or you could do this:

   use CGI qw/:standard/;           # import &head and others
   BEGIN { delete $main::{head}; }  # unimport &head
   use LWP::Simple qw(head);        # import &head

or you can simply avoid importing and use always fully qualified names:

   use CGI ();
   use LWP::Simple ();

   if (LWP::Simple::head("http://www.activestate.com";)) {
       print CGI::head("ActiveState is up!"), "\n";
   }

Regards,
Gisle

Reply via email to