http://qs321.pair.com?node_id=790282


in reply to creating references

Using diagnostics for more verbose warnings should make things more clear:

#! usr/bin/perl use strict; use warnings; use diagnostics; my $scalar_ref=*foo{SCALAR}; print "scalar ref defined\n" if defined $scalar_ref; #------------------------# my %hash=(); my $hash_ref=*hash{HASH}; print "hash ref defined\n" if defined $hash_ref; __END__ Output: Name "main::hash" used only once: possible typo at test.pl line 11 (#1 +) (W once) Typographical errors often show up as unique variable nam +es. If you had a good reason for having a unique name, then just menti +on it again somehow to suppress the message. The our declaration is provided for this purpose. NOTE: This warning detects symbols that have been used only once s +o $c, @c, %c, *c, &c, sub c{}, c(), and c (the filehandle or format) are con +sidered the same; if a program uses $c only once but also uses any of the +others it will not trigger this warning. Name "main::foo" used only once: possible typo at test.pl line 7 (#1) scalar ref defined

The key part explaing the difference in ouput for your two scripts is :

NOTE: This warning detects symbols that have been used only once so $c, @c, %c, *c, &c, sub c{}, c(), and c (the filehandle or format) are considered the same; if a program uses $c only once but also uses any of the others it will not trigger this warning.

There is also a good discussion of a similar problem in "main::Objects" used only once: possible typo. HTH.

Just a something something...