#!/usr/bin/perl -w use strict; sub print_calling_line { my $actual_line = shift; my $caller_line = (caller)[2]; my $different = $actual_line != $caller_line ? "***" : ""; my $offset = " (+" . ($caller_line-$actual_line) . ")"; printf "%3s Called from %2d; caller() reports %2d%s [args: @_]\n", $different, $actual_line, $caller_line, $offset; } print_calling_line( __LINE__, 1, @{[ "DEREF" ]}, 3 ); print_calling_line( __LINE__, 1, do { "DO" }, 3 ); print_calling_line( __LINE__, 1, eval { "EVAL" }, 3 ); print_calling_line( __LINE__, 1, sub { "SUB" }, 3, 4 );