Skip to content

Instantly share code, notes, and snippets.

Created December 20, 2017 19:23
What would you like to do?
The 'each' function documentation is missing some information.
1. When called in scalar context in a while loop, the condition is wrapped
implicitly in a 'defined' check, much like with 'readline'.
e.g. `while (my $key = each %hash) { ... }` becomes
`while (defined(my $key = each %hash)) { ... }`, and
`while (each %hash) { ... }` becomes `while (defined($_ = each %hash)) { ... }`
(on 5.18+)
2. The iterator is not only shared and reset by calling 'keys' or 'values', but
also by other calls to 'each' on the same hash or array, and by accessing the
hash in list context (such as for assignment to another structure, or passing
to a function) - this last one only applies to hashes, not arrays.
When the warning "Scalar value @arrayname[0] better written as $arrayname[0]"
is triggered (any time an array slice is used with only one element), this results
in an error if the array's name starts with 'inf'. Code to reproduce:
use warnings;
my @infasdf;
my @x = @infasdf[0];
Error from above code (since 5.22): Cannot printf Inf with 'c' at (IRC) line 3.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment