use strict; use warnings; sub bin_search { my $array = shift; my $find = shift; return unless @$array; my ($l,$r)=(0,$#$array); while ($l<=$r) { my $m=int(($l+$r)/2); if ($find<$array->[$m]) { $r=$m-1; } elsif ($find>$array->[$m]) { $l=$m+1; } else { return $m; } } return undef; } my @list=map { $_*2 } (1..5); for (0..11) { my $pos=bin_search(\@list,$_); print "Search:$_ Position:",defined $pos ? $pos : "undef","\n"; }