in reply to Can we have C-style Modularity?

You certainly will see a variety of approaches used.   For instance, the Regex::Common package consists entirely of exported or exportable routines; as does Scalar::Util.

By far the most common approach, however, is to build packages that implement Perl “objects,” using the notions of inheritance in those implementations.   This provides you with the functionality that you seek while also effectively dealing with the per-instance storage management issues that are naturally involved.   When you “create an object,” that object automagically knows what package(s) to refer to, and it automagically provides both its “methods” and a block of per-instance storage (a hash).   Well thought out.   Very nice.

One of the mantras of Perl is TMTOWTDI = There’s More Than One Way To Do It.   And, that is certainly true.   Out of this, certain accepted “best practices” have clearly emerged.   (Adherence to them is “voluntary, but wise.”)