This is very close to what I do. I think of
strict and
warnings as part of an extended shebang line.
Exporter is ugly so I avoid it wherever possible; though when I use it, I tend not to treat it and its globals specially. Finally, I reserve
require solely for deferred loading of modules. So I arrive at a layout like this:
#!/usr/bin/perl
use strict;
use warnings;
package FooBar;
use Some::OO::Module ();
use Some::Function::Module qw( Func1 Func2 );
use base 'Quux';
use vars qw($VERSION);
$VERSION= 1.001;
use constant _IdNo => 0;
use constant _Name => 1;
use constant _Pos => 2;
Makeshifts last the longest.