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..."
In reply to How to get the name of an aliased function by DrWhy
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |