I am not sure if and what difference it makes if a start a perl module with
package MYPACKAGE;
use 5.12.0;
use warnings;
# functions are here
1;
or
use 5.12.0;
use warnings;
package MYPACKAGE;
# functions are here
1;
or if these use ...
are not regarded at all because the use ...
are inherited from the calling perl script.
The question probably boils down to: is it worthwile to specify those use ...
in a module or is it sufficient if I have them specified in my perl script.
Pragmatic modules have lexical, not dynamic scope.
The version pragma activates certain features in the current scope, depending on the version. It doesn't activate these features globally. This is important for backwards-compability.
This means that a pragma can be activated outside of the module definition, but inside our scope:
# this is package main
use 5.012; # activates `say`
package Foo;
say "Hi"; # works, because lexical scope
This is different from normal imports that are imported into the current package (!= scope).
The warnings
pragma activates warnings inside the current scope.
However, every file should contain the use strict
, as lexical scope never stretches accross files. Pragmas are not transitive:
Foo.pm:
say "Hi";
1;
main.pl:
use 5.012;
require Foo;
fails.
Where exactly you put these pragmas is thus largely irrelevant. I'd recommend putting the pragmas before the package
when you have multiple namespaces in the file, e.g.
use 5.012; use warnings;
package Foo;
...;
package Bar;
...;
1;
but to put the package
first if it is the only one in the file.
package Foo;
use 5.012; use warnings;
...;
1;
The only important thing is that you do use
them ;-)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With