in reply to use of modules in special cases

In case 1, you should request B. The implementation of B1 and B2 might change in the future, if your code uses something coming from B, be explicit about it. If the classes are object oriented, it means in module A you build objects of all three classes B, B1, and B2.

In case 2, you shouldn't specify the use clause. In fact, the object you get from elsewhere might in fact be of a different class, inheriting from B, or even duck-typed.

map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]