Some test code expanding on Jenda's suggestion, partially to satisfy my own curiosity. Interesting problem, hope this is of some help - its rough.
A runtime flag in caller() lets
your module evaluate at what stage it is being compiled...
package amIBeingUsed; # in amIBeingUsed.pm
if(defined( ${ caller()."::RUNTIME_OK" } ))
{
# the flag is set
print "what took you so long to call me?";
}
else
{
# still compiling
print "eurgh, i feel so cheap!";
}
sub import
{
print " slap!!!\n";
}
1;
...meanwhile, at the Bat Cave ...
use strict;
my $module = "amIBeingUsed";
our $RUNTIME_OK = 1;
# possible scenarios
use amIBeingUsed; # "eurgh, i feel so cheap! slap!!!"
eval "use $module"; # "what took you so long to call me? slap!!!"
require amIBeingUsed; # "what took you so long to call me?"
eval "require $module"; # "what took you so long to call me?"