in reply to How to get the name of an aliased function

The usual way to generate various behaviors of a subroutine is by passing it parameters of various values, as you currently do. Your current setup is pretty reasonable, but do you really need to create three apparently different subroutines when passing a parameter will do?

One reason you may want to have three different subs is that MainSub may do wildly different things, depending on the value of the first parameter. In which case it would probably be better to split MainSub into three smaller subs, each doing only a single task:

sub MainSub { my $name = shift; if ($name eq 'Bob') { sub1(@_); } elsif ($name eq 'Ted') { sub2(@_); } elsif ($name eq 'Alice') { sub3(@_); } else { die "First parm $name should be Bob, Ted, or Alice\n"; } }
Depending on the conceptual structure of your problem, you might instead create a base class with a virtual method and three derived classes with method overrides.

But any of the methods above is better that trying to use an alias to in effect pass a parameter. Aliases would be more indirect, more confusing, and harder to debug.

-Mark