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"