Item Description: A great module for catching and possibly telling you how to fix and error
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.
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.
my ($q,$w) = 1,2;
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.
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.
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.