Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

What does this warning mean?

by cbussanich (Initiate)
on Aug 16, 2001 at 22:18 UTC ( [id://105460]=perlquestion: print w/replies, xml ) Need Help??

cbussanich has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I would appreciate any help. I am writing some basic CGI scripts. I am testing to see if any parameters were passed to my script via CGI. When I pass CGI variables, param is not behaving nicly. Line 97 is the first line here. My code segment is:
if ( ! param ) { # No parameters passed in. print "No parameters were passed to script."; }
The following warning appears while stepping through the debugger, and at the bottom of the web page that my script generates.
Use of uninitialized value in string eq at d:\ .... line 97, line 127 (#1) (W uninitialized) An undefined value was used as if it were already defined. It was interpreted as a "" or a 0, but maybe it was a mistake. To suppress this warning assign a defined value to your variables. To help you figure out what was undefined, perl tells you what operation you used the undefined value in. Note, however, that perl optimizes your program and the operation displayed in the warning may not necessarily appear literally in your program. For example, "that $foo" is usually optimized into "that " . $foo, and the warning will refer to the concatenation (.) operator, even though there is no . in your program.

Is this a warning I should worry about? I am using "strict" and -w, by the way. Many thanks, Colin

Replies are listed 'Best First'.
(elbie): What does this warning mean?
by elbie (Curate) on Aug 17, 2001 at 01:05 UTC
    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...


      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?


Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://105460]
Approved by root
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others lurking in the Monastery: (5)
As of 2024-05-30 15:21 GMT
Find Nodes?
    Voting Booth?

    No recent polls found