sub foo { my $calling_sub = (caller 1)[3]; $calling_sub = 'the main block' if !defined $calling_sub; print "called from: $calling_sub\n"; } sub bar { foo(); } bar(); # prints: called from: main::bar foo(); # prints: called from: the main block