http://www.perlmonks.org?node_id=652383

strat has asked for the wisdom of the Perl Monks concerning the following question:

Good morning,

I found a strange behaviour of perl when a function has the same fully qualified name as a package name. Here a shortened example:

Code 1: fails

#! /usr/bin/perl use warnings; use strict; package ABCconf; sub Query { my( $package ) = caller; print "Query called from $package\n"; my $x = ABCconf::Query->new(); } sub Insert { print "Insert called\n"; my $x = ABCconf::Query->new(); # <= problem: calls ABCconf::Query +and then on its output ->new } # Insert package ABCconf::Query; sub new { my $class = shift; print "New called: $class\n"; return bless {}, $class; } # new package main; ABCconf::Query(); print "-" x 60, "\n"; ABCconf::Insert();

Output:

D:\>perl testBug.pl Query called from main New called: ABCconf::Query ------------------------------------------------------------ Insert called Query called from ABCconf New called: ABCconf::Query New called: ABCconf::Query=HASH(0x226290) Attempt to bless into a reference at testBug.pl line 24.

If I put the sub Insert before sub Query, everything works as expected.

Code 2: works

#! /usr/bin/perl use warnings; use strict; package ABCconf; sub Insert { print "Insert called\n"; my $x = ABCconf::Query->new(); } # Insert sub Query { my( $package ) = caller; print "Query called from $package\n"; my $x = ABCconf::Query->new(); } package ABCconf::Query; sub new { my $class = shift; print "New called: $class\n"; return bless {}, $class; } # new package main; ABCconf::Query(); print "-" x 60, "\n"; ABCconf::Insert();

Output:

D:\>perl testBug.pl Query called from main New called: ABCconf::Query ------------------------------------------------------------ Insert called New called: ABCconf::Query

I know it isn't a good idea to use the same fully qualified name for a package or a sub, but I can't change it. Is this a bug, an inconsistency or a feature?

Testet with

D:\>perl -v This is perl, v5.8.8 built for MSWin32-x86-multi-thread (with 18 registered patches, see perl -V for more detail) Copyright 1987-2007, Larry Wall Binary build 822 [280952] provided by ActiveState http://www.ActiveSta +te.com Built Jul 31 2007 19:34:48 ...

Best regards,
perl -e "s>>*F>e=>y)\*martinF)stronat)=>print,print v8.8.8.32.11.32"