select photo_id from colors where ( r between 12 and 15 ) and ( g between 78 and 81 ) and b between 23 and 26 #### 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; }