in reply to Function Identification.
Subroutine calls will be inherited differently depending on whether you're calling them as functions, or as object methods. We can test this with two different modules:
Exporter overwrites the current package's symbol table entry for func() when you use a module. So, as holli has pointed out, if two seperate modules export the same function, the most recent one will be the one that is called: when you use Foo, func() is created locally as a reference to Foo::func(), and then when Bar is imported it replaces the existing reference with one to Bar::func():
OO Perl's inheritance chain works differently - it's done at run-time, left-to-right, depth first (left-to-right is referring to the contents of @ISA). So, if you're using OO modules, you will get the opposite result - a call to func() will go to the *first* module Perl finds, that provides the requested method (function):
package Foo; use base 'Exporter'; @EXPORT = "func"; sub func { return "Foo" }
package Bar; use base 'Exporter'; @EXPORT = "func"; sub func { return "Bar" }
Exporter overwrites the current package's symbol table entry for func() when you use a module. So, as holli has pointed out, if two seperate modules export the same function, the most recent one will be the one that is called: when you use Foo, func() is created locally as a reference to Foo::func(), and then when Bar is imported it replaces the existing reference with one to Bar::func():
[matt@blue 478146] cat func.pl package func; use Foo; use Bar; print func(); [matt@blue 478146] perl -l func.pl Bar
OO Perl's inheritance chain works differently - it's done at run-time, left-to-right, depth first (left-to-right is referring to the contents of @ISA). So, if you're using OO modules, you will get the opposite result - a call to func() will go to the *first* module Perl finds, that provides the requested method (function):
[matt@blue 478146] cat meth.pl package meth; use base 'Foo'; use base 'Bar'; sub new { bless {}, __PACKAGE__ } $o = new meth; print $o->func; [matt@blue 478146] perl -l meth.pl Foo
|
---|
In Section
Seekers of Perl Wisdom