Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

diagnostics.pm

by damian1301 (Curate)
on Feb 08, 2001 at 04:57 UTC ( #57103=modulereview: print w/ replies, xml ) Need Help??

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.

Comment on diagnostics.pm
Select or Download Code
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

Back to Reviews

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (8)
As of 2014-12-19 02:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (70 votes), past polls