sub foo { print "foo @_\n"; for (0..2) { print join('|', caller($_)), "\n" if caller($_); } print "\n"; } my $r1 = sub { foo("bar", @_) }; my $r2 = sub { unshift @_, "bar"; goto &foo }; foo(); $r1->('baz'); # This call has an extra frame in the call stack. $r2->('baz', 'qux');