.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "Perl::Critic::Policy::Modules::RequireFilenameMatchesPackage 3pm" .TH Perl::Critic::Policy::Modules::RequireFilenameMatchesPackage 3pm 2023-07-26 "perl v5.38.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NAME Perl::Critic::Policy::Modules::RequireFilenameMatchesPackage \- Package declaration must match filename. .SH AFFILIATION .IX Header "AFFILIATION" This Policy is part of the core Perl::Critic distribution. .SH DESCRIPTION .IX Header "DESCRIPTION" The package declaration should always match the name of the file that contains it. For example, \f(CW\*(C`package Foo::Bar;\*(C'\fR should be in a file called \f(CW\*(C`Bar.pm\*(C'\fR. This makes it easier for developers to figure out which file a symbol comes from when they see it in your code. For instance, when you see \f(CW\*(C`Foo::Bar\->new()\*(C'\fR, you should be able to find the class definition for a \&\f(CW\*(C`Foo::Bar\*(C'\fR in a file called \fIBar.pm\fR .PP Therefore, this Policy requires the last component of the first package name declared in the file to match the physical filename. Or if \f(CW\*(C`#line\*(C'\fR directives are used, then it must match the logical filename defined by the prevailing \f(CW\*(C`#line\*(C'\fR directive at the point of the package declaration. Here are some examples: .PP .Vb 4 \& # Any of the following in file "Foo/Bar/Baz.pm": \& package Foo::Bar::Baz; # ok \& package Baz; # ok \& package Nuts; # not ok (doesn\*(Aqt match physical filename) \& \& # using #line directives in file "Foo/Bar/Baz.pm": \& #line 1 Nuts.pm \& package Nuts; # ok \& package Baz; # not ok (contradicts #line directive) .Ve .PP If the file is not deemed to be a module, then this Policy does not apply. Also, if the first package namespace found in the file is "main" then this Policy does not apply. .SH CONFIGURATION .IX Header "CONFIGURATION" This Policy is not configurable except for the standard options. .SH AUTHOR .IX Header "AUTHOR" Chris Dolan .SH COPYRIGHT .IX Header "COPYRIGHT" Copyright (c) 2006\-2011 Chris Dolan. .PP This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.