Steven Haryanto >
Number-Closest-NonOO >
Number::Closest::NonOO

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

version 0.03

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

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);

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.

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.

None are exported by default, but they are exportable.

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 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: