The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
NAME
    Number::Closest::NonOO - Find number(s) closest to a number in a list of
    numbers

VERSION
    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

DESCRIPTION
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.

SEE ALSO
    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>

COPYRIGHT AND LICENSE
    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: