$ cat t3.pl #!/usr/bin/perl use warnings; use strict; sub main { warn "called main" } main() unless caller(); $ perl -e ' do "t3.pl" ' $ perl -e ' require "t3.pl" ' $ ./t3.pl called main at ./t3.pl line 6. $ perl -d t3.pl Loading DB routines from perl5db.pl version 1.3 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(t3.pl:7): main() unless caller(); DB<1> c called main at t3.pl line 6. at t3.pl line 6 main::main() called at t3.pl line 7 Debugged program terminated. Use q to quit or R to restart, use o inhibit_exit to avoid stopping after program termination, h q, h R or h o to get additional info. DB<1> q