Chas. Owens wrote:
On Tue, Apr 28, 2009 at 06:36, Dermot <paik...@googlemail.com> wrote:
I saw some code like this today:

!/bin/perl -w
package My::Package;
use strict;
...
%My::Package::somehash = ( keyone => 'val', keytwo => 'val2');

The My::Package::somehash isn't declared as with `my` yet the package
loads without error or warnings. Is this because the hash is given as
a fully qualified name

Yes.

Fully qualified names do not trip strict.  Which is a reason to avoid
using them.  I once work at a place that wrote Perl 5 as if it were
still Perl 4.  They had turned on strict because they had heard it was
the right thing to do, but their response to it failing their scripts
was to move to using only fully qualified variables.

A few years ago I made that same mistake in a rather large Perl program, and I believe that my mistake was caused by the fact that that was just what Perl requested me to do.

$ perl -Mstrict -e'$var=""'
Global symbol "$var" requires explicit package name at -e line 1.
Execution of -e aborted due to compilation errors.
$

The wording of that error message isn't very well thought out. :(

--
Gunnar Hjalmarsson
Email: http://www.gunnar.cc/cgi-bin/contact.pl

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to