another perl question

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Kevin Buettner
Date:  
Subject: another perl question
On May 23, 12:57pm, Roderick Ford wrote:

> I can't figure out from the books why this does not produce a hash element:
>
> $addresses{$lineref->[0]} = ($#cmdNode >= 0 ? $#cmdNode : 0);


It is...

> perl -e '$lineref->[0] = "00401000"; $addresses{"$lineref->[0]"} =
> (defined @cmdNode ? $#cmdNode : 0); print $#{keys %addresses};'


It's just that

    print $#{keys %addresses};


isn't doing what you think it is. Try this instead...

    print scalar (keys %addresses)


..and I think you'll see the answer you expect (which is the number of
elements in the array).

I was puzzled about what exactly ``print $#{keys %addresses}'' is doing.
What I think is happening is that ``keys %addresses'' is getting converted
into a scalar and you're seeing the last array index of the array by that
name. Here's an example which should make this somewhat more clear:

$ perl -e '@aa = (1,2,3); print $#{'a' . 'a'}; print "\n";'
2

Kevin