in reply to Re: while(<>) { ... } considered harmful
in thread while(<>) { ... } considered harmful

Because something like my @idx = map /(id\d+)/, @items; is a lot more natural than
my @idx; /(id\d+)/ && push @idx, $1 for @items;
(which is already pushing legibility). Basically when you build one list out of another, non-destructively, map is the ticket. It can be in other cases as well, but those can often go either way.

Makeshifts last the longest.