in reply to Sharing objects between modules

Others have recommended the Singleton pattern, but I'm not sure if this pattern will suit you in all cases, especially when you want to use different LWP::UserAgent classes (say, LWP::UserAgent and WWW::Mechanize) with different instances of My::Main. If you only need one ::UserAgent subclass per run, then a Singleton is the thing to go with, if you need to switch the class, or supply more than one instance of My::Main with an independent LWP::UserAgent subclass (say, because of cookies), then your way 1 or way 2 are the way to go. Way 3 has the ugly problems you already discussed.