use Test::More *; sub foo () { bar(); } sub bar () { baz(); } sub baz () { is(typeof(caller(0)), "Caller"); is(typeof(caller(0).code()), "Code"); is(caller(0).code().package(), "main"); is(typeof(caller(0).code()), "Code"); is(caller(1).code().name(), "foo"); is(caller(0).code().name(), "bar"); is(typeof(caller(2)), 'Caller'); is(caller(2).code(), undef); is(caller(3), undef); note('Array Style'); is(typeof(caller()), 'Array'); is(caller().size(), 3); is((caller())[0].code().name(), 'bar'); is((caller())[1].code().name(), 'foo'); is((caller())[2].code(), undef); is((caller())[2].file(), __FILE__); is((caller())[3], undef); } foo(); done_testing();