# script.pl
use Module1;
use Module2;
####
# Module1.pm
package Module1;
BEGIN { print("Compiling Module1\n"); }
use Module2;
sub import { print("Module1 exporting to ". caller() . "\n"); }
print("Executing Module1\n");
1;
####
# Module2.pm
package Module2;
BEGIN { print("Compiling Module2\n"); }
sub import { print("Module2 exporting to ". caller() . "\n"); }
print("Executing Module2\n");
1;
####
>perl script.pl
Compiling Module1
Compiling Module2
Executing Module2
Module2 exporting to Module1
Executing Module1
Module1 exporting to main
Module2 exporting to main
####
>perl script.pl | sort
Compiling Module1 --> once
Compiling Module2 --> once
Executing Module1 --> once
Executing Module2 --> once
Module1 exporting to main --> once per "use"
Module2 exporting to main \
Module2 exporting to Module1 --> once per "use"