Steven Haryanto > Number-Closest-NonOO-0.03 > Number::Closest::NonOO
Module Version: 0.03

# NAME

Number::Closest::NonOO - Find number(s) closest to a number in a list of numbers

version 0.03

# SYNOPSIS

``` use Number::Closest::NonOO qw(find_closest_number find_farthest_number);
my \$nums = find_closest_number(number=>3, numbers=>[1, 3, 5, 10], items => 2); # => [3, 1]

\$nums = find_farthest_number(number=>3, numbers=>[1, 3, 5, 10]); # => 10```

# FAQ

## How do I find closest numbers that are {smaller, larger} than specified number?

You can filter (grep) your list of numbers first, for example to find numbers that are closest and smaller or equal to 3:

``` my @nums = grep {\$_ <= 3} 1, 3, 5, 2, 4;
my \$res = find_closest_number(number => 3, numbers => \@nums);```

## How do I find unique closest number(s)?

Perform uniq() (see List::MoreUtils) on the resulting numbers.

Number::Closest. Number::Closest::NonOO is a non-OO version of Number::Closest, with some additional features: customize handling NaN/Inf, find farthest number.

# AUTHOR

Steven Haryanto <stevenharyanto@gmail.com>

This software is copyright (c) 2013 by Steven Haryanto.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

# FUNCTIONS

None are exported by default, but they are exportable.

## find_closest_number(%args) -> any

Find number(s) closest to a number in a list of numbers.

Arguments ('*' denotes required arguments):

• inf => str (default: "nothing")

Specify how to handle Inf.

`exclude` means the items will first be excluded from the list. `nothing` will do nothing about it and will produce a warning if target number is an infinite, `number` will treat Inf like a very large number, i.e. Inf is closest to Inf and largest positive numbers, -Inf is closest to -Inf and after that largest negative numbers.

I'd reckon that `number` is the behavior that most people want when dealing with infinites. But since it's slower, it's not the default and you have to specify it specifically. You should choose `number` if target number is infinite.

• items => int (default: 1)

Return this number of closest numbers.

• nan => str (default: "exclude")

Specify how to handle NaN and non-numbers.

`exclude` means the items will first be excluded from the list. `nothing` will do nothing about it, meaning there will be warnings when comparing non-numbers.

• number* => num

The target number.

• numbers* => array

The list of numbers.

Return value:

## find_farthest_number(%args) -> any

Find number(s) farthest to a number in a list of numbers.

Arguments ('*' denotes required arguments):

• inf => str (default: "nothing")

Specify how to handle Inf.

`exclude` means the items will first be excluded from the list. `nothing` will do nothing about it and will produce a warning if target number is an infinite, `number` will treat Inf like a very large number, i.e. Inf is closest to Inf and largest positive numbers, -Inf is closest to -Inf and after that largest negative numbers.

I'd reckon that `number` is the behavior that most people want when dealing with infinites. But since it's slower, it's not the default and you have to specify it specifically. You should choose `number` if target number is infinite.

• items => int (default: 1)

Return this number of closest numbers.

• nan => str (default: "exclude")

Specify how to handle NaN and non-numbers.

`exclude` means the items will first be excluded from the list. `nothing` will do nothing about it, meaning there will be warnings when comparing non-numbers.

• number* => num

The target number.

• numbers* => array

The list of numbers.

Return value:

syntax highlighting: