in reply to require 'package'

Short answer: remove the die in line 5. The code will continue to execute.

Longer answer: a main use of require is for loading up modules which are in different files -- in fact, what follows require (unless it's a Perl version number, IIRC) is interpreted as a filename -- the compiler will look for a file called program.pm in the directories where your system's perl modules live.

It doesn't really make sense to require a namespace which lives in the same file.

package is just for declaring a new namespace. You'll usually want a module to declare its own package, but that's the only connection between package and require

Philosophy can be made out of anything. Or less -- Jerry A. Fodor