The warnings pragma was added in perl version 5.6.
Putting #!perl -w at the top
of your script is slightly different then
use warnings. That difference is
that use warnings is
lexically scoped (like my variables, so
that you can require without warnings
being on in the require'd file.)
while -w stays on unless
explictly turned off with the special
$^W variable. (Which the warnings pragma
is probably more convient then.)

That way, someone else using your script on another machine doesn't have a nasty surprise. (Personally, I think every production-level script should demand a specific Perl version, even if you know what will happen. You never always know ... ever.)

Version strings, the feature that allows you to write 5.6.0, were also added in 5.6.0. Thus:
use 5.6.0;
will fail in a strange way with older versions of perl:
Can't locate 5.60 in @INC (@INC contains: /usr/lib/perl5/5.00503/i386-linux /usr/lib/perl5/5.00503 /usr/lib/perl5/site_perl/5.005/i386-linux /usr/lib/perl5/site_perl/5.005 .) at -e line 1.

I find it quite frustrating that a feature that is supposed to handle issues of backward compatibility was updated in a non-backward compatible way. :(

You may like to click this link use warnings vs. perl -w to check out an extensive previous discussion of this issue including the Win32 subject. Note you need Perl 5.6.0 or greater to "use warnings" so this is not yet all that portable as many people still use older versions.