Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re^4: caller() mystery

by rovf (Priest)
on Sep 26, 2008 at 10:41 UTC ( #713850=note: print w/replies, xml ) Need Help??


in reply to Re^3: caller() mystery
in thread caller() mystery

Update Please disregard this posting. I finally understood the issue (see id:://713852).
caller(1) returns info about f's caller

If this is the case, I would understand why my approach failed. But then I don't understand why in my original program, caller(1) (executed from within _format_caller) delivered

main,U:\develsv\ARTS\playground\callertest.pl,16,main::f,1,,,,2,UUUUUU +UUUUU
That is, it says "the caller is main::f". This is _format_caller's caller, NOT f's caller. Actually that's why I had concluded that counting would start at 1. And indeed, from the command line:

perl -lwe 'sub a{print((caller 0)[3])};sub b{a()};sub c{b()}; c'
gives main::a (that is, caller 0 says "who I am", i.e. which function is invoking caller).
perl -lwe 'sub a{print((caller 1)[3])};sub b{a()};sub c{b()}; c'
gives main::b (that is, caller 1 says who has called me)
perl -lwe 'sub a{print((caller 2)[3])};sub b{a()};sub c{b()}; c'
gives main::c (that is, the caller of main::b), but for
perl -lwe 'sub a{print((caller 3)[3])};sub b{a()};sub c{b()}; c'
I would have expected to get information about the caller of main::c, which is the main program (not the shell), but there is none.

-- 
Ronald Fischer <ynnor@mm.st>

Replies are listed 'Best First'.
Re^5: caller() mystery
by JavaFan (Canon) on Sep 26, 2008 at 10:55 UTC
    that is, caller 0 says "who I am", i.e. which function is invoking caller

    No, you are incorrect.

    caller() doesn't return which 'function' calls you - it returns the package name, the file name and the line number of the caller; which is in the first three arguments. All the other arguments have to do how you are called. So, caller(0)[3] returns how you were called as.

    If you want to find out which function called you (if there is such a function), you call caller(1), which gives you information how your caller is called.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://713850]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (7)
As of 2020-06-05 20:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you really want to know if there is extraterrestrial life?



    Results (40 votes). Check out past polls.

    Notices?