Every subroutine is defined in the symbol table (or namespace) of a package, the default package being main. A subroutine can always be invoked or referenced using a fully-qualified subroutine name that includes the package. The following example does not cover the complete process of defining a standalone module, which you seem to understand, but should be enough to illustrate the principle of using a fully-qualified subroutine name. See perlmod.
>perl -wMstrict -le
"package Module1;
;;
sub main { print qq{hi from main($_[0]) in package }, __PACKAGE__; }
;;
package Module2;
;;
sub main { print qq{hi from main($_[0]) in package }, __PACKAGE__; }
;;
package main;
;;
my %pages = (
PG_1 => \&Module1::main,
PG_2 => \&Module2::main,
);
;;
my $pg = 'PG_2';
$pages{$pg}->(42);
"
hi from main(42) in package Module2
Update: Note that it's usually a Bad Idea to define a function with the same name as a very important global namespace, i.e., main. It is quite possible to keep everything straight, but you risk giving yourself a terrible headache.