The answers are:
- Yes
- Yes
- Just because.... ;-)
In a few cases,
$_ is implicitely
localized:
in the block/expression of
map and
grep
and in the block of a
foreach that doesn't have
its own iterator mentioned. (If the iterator is mentioned,
with no
my preceeding it, the iterator is
localized too). This is all documented where
foreach,
map and
grep are documented:
perlsyn and
perlfunc.
There is a difference between foreach and
while because they are two totally different
things. foreach always assigns
to a variable when looping over a list, while while
normally doesn't. It's just that while (<>)
is an exception and only when there's a single diamond
operator there's an implicite assignment to $_.
-- Abigail