---
name: "Perl::Critic::Policy::Variables::ProhibitLoopOnHash"
section: "3pm"
platform: "linux"
package: "libperl-critic-policy-variables-prohibitlooponhash-perl"
version: "0.008-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Perl::Critic::Policy::Variables::ProhibitLoopOnHash"
---

# Perl::Critic::Policy::Variables::ProhibitLoopOnHash(3pm)

Don't write loops on hashes, only on keys and values of hashes

## NAME

Perl::Critic::Policy::Variables::ProhibitLoopOnHash - Don't write loops on hashes, only on keys and values of hashes

## VERSION

version 0.008

## DESCRIPTION

When "looping over hashes," we mean looping over hash keys or hash values. If you forgot to call `"keys"` or `"values"` you will accidentally loop over both.

```
    foreach my $foo (%hash) {...}        # not ok
    action() for %hash;                  # not ok
    foreach my $foo ( keys %hash ) {...} # ok
    action() for values %hash;           # ok
```

An effort is made to detect expressions:

```
    action() for %hash ? keys %hash : ();                             # ok
    action() for %{ $hash{'stuff'} } ? keys %{ $hash{'stuff'} } : (); # ok
```

(Granted, the second example there doesn't make much sense, but I have found a variation of it in real code.)

## CONFIGURATION

This policy is not configurable except for the standard options.

## AUTHOR

Sawyer X, `"xsawyerx@cpan.org"`

## THANKS

Thank you to Ruud H.G. Van Tol.

## SEE ALSO

Perl::Critic

## AUTHOR

Sawyer X

## COPYRIGHT AND LICENSE

This software is copyright (c) 2018 by Sawyer X.

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