DrWhy has asked for the wisdom of the Perl Monks concerning the following question:
I have a function that is aliased to several different names, and I want it to behave slightly differently depending on which name it was called by. Here is a baby example of what I have in mind:
I had hoped and expected this to print out:sub MainSub { my $name = (caller 0)[3]; print "My name is $name\n"; } *sub1 = \&MainSub; *sub2 = \&MainSub; *sub3 = \&MainSub; sub1(); sub2(); sub3();
Instead I get:My name is main::sub1 My name is main::sub2 My name is main::sub3
I assume by this that the form of aliasing I'm doing on the functions is more comparable to a symbolic link than a hard link, though not being familiar with Perl's guts I don't know how the caller function is implemented. Do any of you know of a way for a function to get at the name it was actually called by in the code as opposed to the name of the original function definition? Currently, I am getting the desired behavior by turning the subN's into wrappers around a call to MainSub:My name is main::MainSub My name is main::MainSub My name is main::MainSub
But I'm hoping for a more elegant solution.sub MainSub { my $name = shift; print "My name is $name\n"; } sub sub1 {MainSub('sub1')} sub sub2 {MainSub('sub2')} sub sub3 {MainSub('sub3')}
--DrWhy
"If God had meant for us to think for ourselves he would have given us brains. Oh, wait..."
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: How to get the name of an aliased function
by adrianh (Chancellor) on Aug 25, 2005 at 08:10 UTC | |
|
Re: How to get the name of an aliased function
by kvale (Monsignor) on Aug 25, 2005 at 08:03 UTC | |
|
Re: How to get the name of an aliased function
by davido (Cardinal) on Aug 25, 2005 at 07:49 UTC | |
|
Re: How to get the name of an aliased function
by BrowserUk (Patriarch) on Aug 25, 2005 at 13:32 UTC | |
|
Re: How to get the name of an aliased function
by japhy (Canon) on Aug 25, 2005 at 14:24 UTC | |
|
Re: How to get the name of an aliased function
by tlm (Prior) on Aug 25, 2005 at 10:44 UTC | |
by DrWhy (Chaplain) on Aug 26, 2005 at 16:42 UTC | |
by tlm (Prior) on Aug 27, 2005 at 00:20 UTC | |
|
Re: How to get the name of an aliased function
by xdg (Monsignor) on Aug 25, 2005 at 22:53 UTC | |
|
Re: How to get the name of an aliased function
by ambrus (Abbot) on Aug 25, 2005 at 22:00 UTC |