After about a month of being with perl monks I have noticed that most of you religously push use strict and -w. While I have learned to use strict, and appriciate it's contraints, I found -w a little more annoying.

First let me mention that I mainly write CGI programs. Most of the programs that I write run multiple times, each time acting as a different program. This is basically because I like to keep everything in one file, it eliminates the need for a central config file, and I like the portability. However this also means, that only certain variables are used in certain parts of the overall program, and that -w fills up my error_log with 'Use of uninitialized value'. I do not see any problem with having variables that only ocassionaly do something, besides taking up file space.

Basically, I'm asking, Is this something I should worry about? Here are some possible solutions, the last being my favorite.

I would appriciate any insight you might have on the matter. For an example of the coding technique I am reffering to, check out my DB Mangager.

thanks - thabenksta

my $name = 'Ben Kittrell'; $name=~s/^(.+)\s(.).+$/\L$1$2/g; my $nick = 'tha' . $name . 'sta';

Replies are listed 'Best First'.
Re: Benefits of -w
by Masem (Monsignor) on Apr 09, 2001 at 07:38 UTC
    I'd still say go with -w; you're not going to change how your CGI runs, but being able to catch uninitialized values now means that when you might expand or debug a new part of the script, you won't be bitten by problems. Most of the fixes where you have uninitialized values probably mean you need to do things like $value = $cgi->param( 'field' ) || ''; as to clean the uninitialized portion out.

    And, perl -wT and 'use strict' are good habits to get into now, particularly as a CGI author, as repeated countless times here.

    To actually do this, I'd put on -w for a script, check it from the command line, then modify as needed; repeat for all scripts. Then, watch the error.log file as there will still be warnings that were not seen during compilation that might be obtained during runtime, and fix these; this latter step may take several weeks or months to completely do because of how the site gets used.

    Very much alternatively, you could have a script that when the logs are archived out, you can strip all lines with that warning on them, as to shorten the text file. Of course, ignoring such an error may result in something worse in the future.


    Dr. Michael K. Neylon - mneylon-pm@masemware.com || "You've left the lens cap of your mind on again, Pinky" - The Brain
Re: Benefits of -w
by voyager (Friar) on Apr 09, 2001 at 08:19 UTC
    Do like Masem says: use -w, and techniques like:
    my $parm1 = $q->param('parm1') || '';
    when you know it's okay to have an empty value. Then when you're debugging you can check the log for uninitialized errors, among others.

    If the log is full of unitialized warnings, how will you catch the one that's causing your CGI program to misbehave?

Re: Benefits of -w
by davorg (Chancellor) on Apr 09, 2001 at 12:50 UTC
    However this also means, that only certain variables are used in certain parts of the overall program, and that -w fills up my error_log with 'Use of uninitialized value'.

    I'm a little confused by what you're saying here. If you're getting the "unititialized value" error then you are using those variables without assigning a value to them first. This is often a source of hard to track down bugs in your code - which is why -w identifies them.

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

    "Perl makes the fun jobs fun
    and the boring jobs bearable" - me

Re: Benefits of -w
by idnopheq (Chaplain) on Apr 09, 2001 at 18:00 UTC
    I tend to agree with the others. Warnings are your friends. As Sun Tzu said (and I paraphrase) "The best way to avoid a trap is knowing where it is". Generally, I'll not only 'use strict' and '-w' my stuff for everyday, but when developing, testing, and debugging, I'll 'use diagnostics' and fire up the 'ol debugger.

    I especially like this if developing for a broad audience, web stuff included. The extra time and grief saves me tenfold down the line.

    HTH
    Dex

    p.s. - YMMV ... TTOSBT (To thine own self be true).