## name Basic forward for/foreach ## failures 2 ## cut for (%hash) { foreach (%hash) { ## name forward for/foreach with variable ## failures 2 ## cut for $foo (%hash) { foreach $foo (%hash) { ## name forward for/foreach with lexical variable ## failures 2 ## cut for my $foo (%hash) { foreach my $bar (%hash) { ## name postfix variations ## failures 4 ## cut print for %hash; print for %{$hash}; print for %{ something() }; print foreach %hash; ## name reference variation ## failures 8 ## cut for my $foo (%{$hash}) { foreach my $bar (%$hash) { for $foo (%{$hash}) { foreach $foo (%$hash) { for (%{$hash}) { foreach (%$hash) { print for %{$hash}; print foreach %$hash; ## name Correct patterns ## failures 0 ## cut for my $foo (keys %hash) { for my $foo (values %hash) { foreach my $bar (keys %hash) { for $foo (values %hash) { foreach $foo (keys %hash) { for (values %hash) { foreach (keys %hash) { print for values %hash; print foreach keys %hash; print for ( values %hash ); print foreach (keys %hash); print foreach (keys %{$hash}); print foreach (keys %{ some_big_thing() }); for my $k (%foo ? sort keys %foo : sort keys %bar) { for my $k (%{$foo} ? sort keys %{$foo} : sort keys %{$bar}) { for my $k (%{ func() } ? sort keys %{ func() } : sort keys %{ func() }) { ## name Using "for"/"foreach" as hash key ## failures 0 ## cut $hash{for} $hash->{for} $hash->{ for } $hash{foreach} $hash->{foreach} $hash->{ foreach } # These came from Ahmed Abdrabo and Andy Lester ## name thing() for @array statement ## failures 0 ## cut print for @INC say for @INC END { $dbh->do("DROP TABLE $_") foreach @table } { print foreach @y } { print foreach 1..2 } { print foreach @y; } { print } print foreach @y; ## name thing() for %hash statement ## failures 7 ## cut print for %INC say for %INC END { $dbh->do("DROP TABLE $_") foreach %tables } { print foreach %y } { print foreach %{@y} } { print foreach %y; } print foreach %y; ## name Variable attributes ## failures 1 ## cut # this is fine for my Dog $foo (@bar) { } for my Foo::Bar $foo (@bar) { } # fails for my Foo::Bar $foo (%bar) { } ## name Reference Aliasing ## failures 0 ## cut foreach \my %hash (@array_of_hash_references) {} ## name Empty postfix loop ## failures 0 ## cut for Class->method($foo);