On 12/01/2009 04:52 PM, Dermot wrote:
2009/12/1 Matt Sergeant<mserge...@messagelabs.com>:
On Tue, 1 Dec 2009 11:23:09 -0500, Matt Sergeant wrote:
On Mon, 30 Nov 2009 18:24:12 +0000, Chris Jack wrote:
1) Without running it to check, what does the following program output?
my %a = (3,2,1,0);
for my $b (sort values %a) {
$b += 4;
}
print $a{1} . "\n";
Bizarrely enough, on both my Snow Leopard machines (default perl
install) this outputs: 4D
This is one of those situation where I should keep quiet to avoid
showing my ignorance but I can't help myself.
My first impression was that it would be 4. However, without running
it, I would say 0 on the basis that $b is scoped within the loop and
(not sure about this point) is a copy of the value in $a{1}.
Ah, but $b isn't a copy (of the value in) $a{1}, it's actually an
_alias_ to the value in $a{1}. Updating $b will change the value in the
underlying hash.
Same thing applies in a foreach loop (and probably other places).
foreach my $foo (@bar) {
# Updating $foo changes the value in @bar
}
I await the flak.
No flak. It's a common enough misunderstanding. Happy to have the chance
to explain.
Dave...