http://qs1969.pair.com?node_id=11108514


in reply to Re^3: Strict and warnings: which comes first?
in thread Strict and warnings: which comes first?

Since Perl 5.12, package has started to become more interesting. You can do stuffs like:

use v5.16; use strict; use warnings; package Foo::Bar 1.2 { ...; }

Although the extended syntax for package doesn't need feature or a use VERSION line to enable it, it seems like a good idea to put the use VERSION before it rather than after, so people with older Perls get an error message about their Perl being too old, instead of an error message about being unable to parse the package statement.

And even in cases where I'm supporting older Perls, I keep all that stuff before package.

Sometimes I'll also use modules before package if I know I'm not importing anything into my namespace from them, like:

use v5.16; use strict; use warnings; use Scalar::Util (); package Foo::Bar 1.2 { ...; my $addr = Scalar::Util::refaddr($ref); # use fully-qualified nam +e because not imported }

Replies are listed 'Best First'.
Re^5: Strict and warnings: which comes first?
by jcb (Parson) on Nov 10, 2019 at 00:00 UTC

    That is nice syntactic sugar if you want multiple versioned packages in the same file, but I usually keep to "one package per module file" and keeping package on the first line is helpful with other tools; this is similar to the insistence in the GNU Coding Standards that function names begin in the leftmost column. It is a convention that makes files easier for me to process with other (written on the spot one-shot) tools.

Re^5: Strict and warnings: which comes first?
by haj (Vicar) on Nov 09, 2019 at 15:51 UTC
    And even in cases where I'm supporting older Perls, I keep all that stuff before package.
    I like that! I just adapted my package template to do the same. I'll not use strict; in versions newer than 5.12 though, because it is already included, and I'll stick to package Foo::Bar 1.2; if I have only one namespace in one file (which is the overwhelming majority).