Perl::Critic::Policy::Modules::ProhibitModuleShebang - don't put a #! line at the start of a module file
This policy is part of the Perl::Critic::Pulp add-on. It asks you not to use a #! interpreter line in a .pm module file.
Perl::Critic::Pulp
#!
#!/usr/bin/perl -w <-- bad package Foo; ...
This #! does nothing but might make a reader think it's supposed to be a program instead of a module. Often the #! is a leftover cut and paste from a script into a module, perhaps when grabbing a copyright notice or similar intro.
Of course a module works the same with or without, so this policy is low priority and under the "cosmetic" theme (see "POLICY THEMES" in Perl::Critic).
Only the first line of a file is a prospective #! interpreter. A #! anywhere later is allowed, for example in code which generates other code,
sub foo { print <<HERE; #!/usr/bin/make <-- ok # Makefile generated by Foo.pm - DO NOT EDIT ...
This policy applies only to .pm files. Anything else, such as .pl or .t scripts can have #!, or not, in the usual way. Modules are identified by the .pm filename because it's hard to distinguish a module from a script just by the content.
.pl
.t
If you don't care about this you can always disable ProhibitModuleShebang from your .perlcriticrc in the usual way (see "CONFIGURATION" in Perl::Critic),
ProhibitModuleShebang
[-Modules::ProhibitModuleShebang]
allow_bin_false
If true then allow #!/bin/false in module files.
#!/bin/false
#! /bin/false <-- ok
Such a #! prevents executing the code if accidentally run as a script. Whether you want this is a personal preference. It indicates a module is not a script and so accords with ProhibitModuleShebang, but in general it's probably unnecessary.
Perl::Critic::Pulp, Perl::Critic
http://user42.tuxfamily.org/perl-critic-pulp/index.html
Copyright 2010, 2011, 2012, 2013 Kevin Ryde
Perl-Critic-Pulp is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.
Perl-Critic-Pulp is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with Perl-Critic-Pulp. If not, see <http://www.gnu.org/licenses>.
To install Perl::Critic::Pulp, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Perl::Critic::Pulp
CPAN shell
perl -MCPAN -e shell install Perl::Critic::Pulp
For more information on module installation, please visit the detailed CPAN module installation guide.