my(@ids) = qw/1 3 4 12 41 43 44 55 67 78 103 156 167 176 198 244 300 345 355/; my($id, $idx) = (4, undef); sub binSearch { my($arrRef, $val, $minIdx, $maxIdx) = @_; my($mid) = int(($maxIdx + $minIdx)/ 2); my($idx); return(($arrRef->[$mid] == $val) ? $mid : (($minIdx == $maxIdx) ? undef : (($arrRef->[$mid] >= $val) ? binSearch($arrRef, $val, $minIdx, $mid) : binSearch($arrRef, $val, $mid+1, $maxIdx)))); } printf("IDX: %s\n", defined($idx=binSearch(\@ids, $id, 0, $#ids)) ? $idx : "UNDEF");