my @match = map Filter( 'r', $minred, $maxred, Filter( 'g', $mingreen, $maxgreen, Filter( 'b', $minblue, $maxblue, $array[ $_ ] ))), @array; sub Filter { my ( $colour, $min, $max, $href ) = @_; $href or return undef(); ( $href -> { $colour } >= $min ) or return undef(); ( $href -> { $colour } <= $max ) or return undef(); return $href; }