First of all, all lowercase module names are reserved for perl pragmas. You better name your modules "Interface1" and "Interface2" respectively.
For example, if I call the function terraform which is described in both interfaces and the variable $version is 1, then the interface1.pm version of terraform will be used. If version was 2, interface2.pm would be used.
If I get you right you want something like this:
#file Interface1.pm
package Interface1;
sub foo
{
return "I am one!\n";
}
1;
#file Interface2.pm
package Interface2;
sub foo
{
return "I am two!\n";
}
1;
#file script.pl
use strict;
use warnings;
use Interface1;
use Interface2;
my $interface;
$interface = "Interface1";
print $interface->foo();
$interface = "Interface2";
print $interface->foo();
Edit:
or without "class method syntax":
$interface = "Interface1";
eval "print $interface" . "::foo()";
$interface = "Interface2";
eval "print $interface" . "::foo()";
Note that you have to use the concatenation here, because perl would interpret
eval "print $interface::foo()";
as a reference to the variable $foo in package Interface1 and that fails.