in reply to Iterating hash of blessed hashes
What's the best approach? My solution feels a bit clunky...
You could omit a couple of temporary variables and initialising $rating wouldn't go amiss:
my $hdata = <call that creates the struct>; my ($rating, $bwurl) = 0; foreach my $id ( keys %$hdata ) { if($hdata->{$id}{Season} == $seasonnum && $hdata->{$id}{Rating} > +$rating){ $rating = $hdata->{$id}{Rating}; $bwurl = $hdata->{$id}{BannerPath}; } }
But essentially what you have is about as good as it gets.
You might use List::Util::reduce(), but it is certainly no clearer:
use List::Util qw[ reduce ]; ... my $hdata = <call that creates the struct>; my( $rating, $bwurl ) = @{ reduce{ if( $hdata->{$b}{Season} == $seasonnum && $hdata->{$b}{Rating} > $ +a->[0] ){ $a->[0] = $hdata->{$b}{Rating}; $a->[1] = $hdata->{$b}{BannerPath} } } [ 0, '' ], keys %hdata };
|
|---|