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 };

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.