main() is still called for me under
perl -d:
$ 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