Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

(elbie): What does this warning mean?

by elbie (Deacon)
on Aug 17, 2001 at 01:05 UTC ( #105519=note: print w/ replies, xml ) Need Help??

in reply to What does this warning mean?

It's a rather lengthy error message. I'm not sure how much of it was generated by the debugger, but in the example you give, you're invoking an uninstantiated method of the CGI module.

The error may go away if you create a CGI object as follows:

my $cgi_object = new CGI; if( ! $cgi_object->param() ) { print "No yadda yadda yadda."; }

Naturally, you may want to have the CGI object created much earlier in your program...


Comment on (elbie): What does this warning mean?
Download Code
Replies are listed 'Best First'.
Re: (elbie): What does this warning mean?
by davorg (Chancellor) on Aug 17, 2001 at 12:08 UTC

    It's a long message because the script probably contains use diagnostics.

    Creating a CGI object will have no effect here. The script will be using

    use CGI qw(:standard);

    instead of just

    use CGI;

    This imports the functions into your symbol table and means that you don't need to create a CGI object (actually the module does it for you behind the screens). This is a far easier way to use and seems to be the way that most people recommend these days.

    If you are going to use the CGI object interface to, then please don't use the new CGI syntax as there are subtle dangers with it as noted in The Perl Cookbook and Object Oriented Perl. It is far better to use syntax like CGI->new.


    Perl Training in the UK <>

      I was unaware that one could run into problems using the object orientet syntax. I went and looked in the Perl Cookbook, but all I saw was a line that recommended the "procedural farmat for casual use", but it didn't really give me much of a reason for it.

      I don't have access to Object Oriented Perl. What sort of dangers are you referring to?


        In the Cookbook, it's page 446 "A Warning on Indirect Object Notation" and in OOP it's pp98-101 "Another way to call a constructor".

        To summarise, there are two problems with it:

        1. The classname in method CLASS must be a bare symbol, a block or a scalar variable. It can't be just any old scalar expression. This can lead to surprising parsing.
        2. Perl needs to guess whether the method is, in fact, a method or a function. It can sometimes get this wrong. Particularly if your method has the same name as a function in your main package.

        In general it will work fine, but the times that it won't work are so difficult to keep a track of that it's best to never use it. There's no good reason not to use the alternative CLASS->method syntax, so I see it as a good habit to get into.


        Perl Training in the UK <>

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://105519]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (6)
As of 2015-11-25 23:33 GMT
Find Nodes?
    Voting Booth?

    What would be the most significant thing to happen if a rope (or wire) tied the Earth and the Moon together?

    Results (693 votes), past polls