in reply to Sort and Access Array of Hash

Not to be difficult, but at no point does your posted code invoke Math::Currency, so I have no method for replicating your issue. Surely you've read How do I post a question effectively?.

The error message means that the method on the line that issues that error is being called on a value that is not a blessed reference. Most often when I get this error, it's because a subroutine unexpectedly returned an undef/empty list.

So unless you post a self-contained example that emits the cited error, it's all just guessing.


#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

  • Comment on Re: Sort and Access Math::Currency Objects

Replies are listed 'Best First'.
Re^2: Sort and Access Math::Currency Objects
by PerlSufi (Friar) on Aug 15, 2014 at 16:10 UTC
    Hi kennethk, my apologies!
    I actually do not care about the value of the Math::Currency object. I actually need the key for $lowest. I have updated my post
      If you want the key that corresponds the the lowest value of a hash, instead of code like
      my $lowest = min values $products_and_prices;
      you'll want something like
      my ($lowest) = sort {$products_and_prices->{$a} <=> $products_and_pric +es->{$b}} keys $products_and_prices;
      The parentheses create list context on the assignment, so that lowest gets assigned to the first list element, which is the item that was smallest. Of course, you could write something more efficient, and I haven't tested the above because you still haven't posted useful example code.

      #11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

        kennethk, I was getting 'Not a Hash Reference' with that sort method, I have updated my code with a sample data structure. Sorry again. UPDATE: With your method slightly modified, I got it:
        my ($lowest) = sort {$products_and_prices->{$a} <=> $products_and_pric +es->{$b}} keys @{$products_and_prices}[0];