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