in reply to Re^2: calculate average from range of hash values (optimize)
in thread calculate average from range of hash values (optimize)

For the record your second solution corrupts the hash with keys whose value is undef. While the OP didnt explicitly say this was bad, I believe it was implicit in the comment that the keys could be very large or very small. Thus a search could inadverdantly create millions of keys and overflow available RAM.


---
demerphq

<Elian> And I do take a kind of perverse pleasure in having an OO assembly language...

Replies are listed 'Best First'.
Re^4: calculate average from range of hash values (optimize)
by Aristotle (Chancellor) on Jul 27, 2003 at 18:32 UTC
    For the record your second solution corrupts the hash with keys whose value is undef.
    Eh? Extraordinarily strange. So a slice lookup autovivifies elements, while a single-element lookup doesn't. Feels like a bug, if you ask me.. certainly counterintuitive. Easy enough to fix, though.
    use List::Util qw(sum); sub average { my ($data, $first, $last) = @_; my @values = map { local $_ = $data->{$_}; defined() ? $_ : () } $ +first .. $last; sum(@values) / @values; }

    Makeshifts last the longest.