use Modern::Perl; my @array = ( 0, 11, 23, 40, 52, 67 ); my $find = 27; my ( $before, $after ) = findValAlongArray( $find, @array ); if ( defined $before and $before == $after ) { say "Exact match $find."; } elsif ( defined $before ) { say "$find is between $before and $after."; } else { say "$find was not found along the array."; } sub findValAlongArray { my ( $find, @array ) = @_; return $find, $find if $find ~~ @array; @array = sort { $a <=> $b } @array; for ( my $i = 0 ; $i < $#array ; $i++ ) { return $array[$i], $array[ $i + 1 ] if $array[$i] < $find and $array[ $i + 1 ] > $find; } undef, undef; } #### 27 is between 23 and 40.