This is PerlMonks "Mobile"

Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Item Description: A great module for catching and possibly telling you how to fix and error

Review Synopsis:


Note: The only reason I put the title as 'use diagnostics' is because I didn't want it to be confused with the Perl documentation page diagnostics.

As many of the monks out there already know, there is a module that catches errors and can potentially help you solve them by giving you examples and explanations of what, possibly, could go wrong.

Just to explain this to you a little more clearly, here is an example that can commonly fail and cause a load of unneeded problems, which no one needs :). This is quite easy though.

#!/usr/bin/perl use diagnostics; my ($q,$w) = 1,2;
Obviously enough, this is a simple error to most Perl users. For those that don't know, the diagnostics module provides some quidelines for you.
Useless use of a constant in void context at c:\windows\TEMP\DzTemp.pl + line 3 (#1) (W void) You did something without a side effect in a context that does nothing with the return value, such as a statement that doesn't return a value from a block, or the left side of a scalar comma operator. Very often this points not to stupidity on your part, but a failure of Perl to parse your program the way you thought it would. For example, you'd get this if you mixed up your C precedence with Python precedence and said $one, $two = 1, 2; when you meant to say ($one, $two) = (1, 2); Another common error is to use ordinary parentheses to construct a list reference when you should be using square or curly brackets, for example, if you say $array = (1,2); when you should have said $array = [1,2]; The square brackets explicitly turn a list value into a scalar value, while parentheses do not. So when a parenthesized list is evaluated in a scalar context, the comma is treated like C's comma operator, which throws away the left argument, which is not what you want. See perlref for more on this.
As you can see this gives great help and most of the time will solve the problem. There are also alot of other good warning modules that you should use to solve an unknown error in your script or just help you maintain it. Some of these are.

1. CGI::Carp
2. warnings
3. strict


In conclusion, this is a great module that should be put at the top of your script next to
use strict;
. Great stuff. I recommend it.

Replies are listed 'Best First'.
Re: diagnostics.pm
by brother ab (Scribe) on Feb 08, 2001 at 11:20 UTC

    I would like to add one more module to the list above - Dunce::Files. It is very-very young and not fully functional yet but the idea looks very interesting.

    -- brother ab