Rob Hanson wrote:

> I am guessing the problem is (as stated in the perldoc) that "the
> optimizer might have optimized call frames away before "caller" had a
> chance to get
> the information.".  Furthermore it states that ""caller(N)" might not
> return
> information about the call frame you expect it do, for "N > 1"".  ...But
> in my case "N" never exceeds 1.
> 

actually, the optimizer didn't optimized the frames. the number you pass to 
caller tells Perl how many levels atop of the current call for the info.

for example:

my @stuff = caller(0);

is the same as:

my @stuff = caller;

which means 0 level up of the call tree so you get what you expect, ie, it 
gives you the information of the function's direct caller.

when you say:

my @stuff = caller(1);

you said give me the parent of the parent (the 1 means one level up of the 
direct caller) and this could return nothing. consider:

#!/usr/bin/perl -w
use strict;

sub fun{
        my @stuff = caller(1);
        print join("\n",@stuff),"\n" if(@stuff);
}

fun

__END__

prints nothing because there is no 2 level caller tree. you can visualize 
the number as the index to the caller tree. a 1 means the second level of 
the caller. 0 means the first level of the caller tree. in fact, Perl's 
default array index machanism works the same way, 0 means the first 
element, 1 means the second element, etc.

david

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to