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:
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
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.