---
name: "Perl::Critic::Policy::Modules::RequireFilenameMatchesPackage"
section: "3pm"
platform: "linux"
package: "perl-perl-critic"
version: "1.156-3"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Perl::Critic::Policy::Modules::RequireFilenameMatchesPackage"
---

# Perl::Critic::Policy::Modules::RequireFilenameMatchesPackage(3pm)

Package declaration must match filename.

## NAME

Perl::Critic::Policy::Modules::RequireFilenameMatchesPackage - Package declaration must match filename.

## AFFILIATION

This Policy is part of the core Perl::Critic distribution.

## DESCRIPTION

The package declaration should always match the name of the file that contains it.  For example, `"package Foo::Bar;"` should be in a file called `"Bar.pm"`. 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 `"Foo::Bar->new()"`, you should be able to find the class definition for a `"Foo::Bar"` in a file called *Bar.pm*

Therefore, this Policy requires the last component of the first package name declared in the file to match the physical filename.  Or if `"#line"` directives are used, then it must match the logical filename defined by the prevailing `"#line"` directive at the point of the package declaration.  Here are some examples:

```
  # Any of the following in file "Foo/Bar/Baz.pm":
  package Foo::Bar::Baz;     # ok
  package Baz;               # ok
  package Nuts;              # not ok (doesn't 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)
```

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.

## CONFIGURATION

This Policy is not configurable except for the standard options.

## AUTHOR

Chris Dolan \<cdolan@cpan.org\>

## COPYRIGHT

Copyright (c) 2006-2011 Chris Dolan.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
