Just add my two cents. It's pretty easy to mix language constructs with conventions. Much of my experience with perl is first to learn to do the right thing, then to figure out whether it's required by the language or it's simply good practice. We all started using "use Foo::Bar::MyClass;" and "package Foo::Bar::MyClass;" from day one. It's pretty obvious what it must mean, especially if one comes from languages like java. But, like most other things perl, it's pretty loose about the three concepts: package, class and file. Here's my understanding (help me here, I'm not writing this with the confidence I'd like to have):