It's not uncommon to have third-party modules to export names,
I always explicitly specify the functions I import for other reasons, so it doesn't matter what third-party modules export.
use B qw( ); # Import nothing
use B qw( foo bar ); # but not moo
It doesn't solve the problem, but it limits the chance of it happening.
use B qw( moo ); # doh!
If you were paranoid, you could import as follows:
use B qw( );
BEGIN {
*_moo = \&B::moo;
}
Then the imported sub will be named _moo. But I don't think it's worth the effort.