http://qs321.pair.com?node_id=105519


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...

elbieelbieelbie

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 CGI.pm 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 CGI.pm and seems to be the way that most people recommend these days.

    If you are going to use the CGI object interface to CGI.pm, 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.

    --
    <http://www.dave.org.uk>

    Perl Training in the UK <http://www.iterative-software.com>

      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?

      elbieelbieelbie

        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.

        --
        <http://www.dave.org.uk>

        Perl Training in the UK <http://www.iterative-software.com>