in reply to Set::Range - conditional testing on sets
use Set::Range;
my %set= ('1' => { lower => 0, upper => 10, upper_inclusive => 1, }, '2' => { lower => 11, upper => 100, lower_inclusive => 1, }, );
my $range=Set::Range->new(\%set); print $range->getState('19', NUM_RANGE); # prints "2"
my %set= ('Jan' => { lower => '1/1/2001', upper => '1/31/2001', upper_inclusive => 1, lower_inclusive => 1, }, # Days in January 'Feb' => { lower => '2/1/2001', upper => '2/28/2001', upper_inclusive => 1, lower_inclusive => 1, }, # Days in February );
my $range=Set::Range->new(\%set);
print $range->getSet('1/11/2001', DATE_RANGE); # prints "Jan"
Set::Range allows you to define ranges of numeric or date values and will return the set that a given test value lies in. This module removes the need for multiple if .. elsif .. (etc) tests and lets you modify the sets on the fly without having to recode the logic in your scripts.
E.g.: define date ranges and test for which set '1/1/2002' is in.
Example: my $range = Set::Range->new(\%sets);
Pass new() a reference to a Hash containing the set information.
The hash defining the sets contains one hash per set with at least 'upper' and 'lower' defined. 'upper_inclusive' and 'lower_inclusive' are optional and are the equivalent of >= and <= for the upper and lower set boundries.
The set hash can look like this:
{ 'key1' => { lower => 0, upper => 10 }, 'key2' => { lower => 10, upper => 15, lower_inclusive => 1, }, 'key3' => { lower => 15 upper => 25, lower_inclusive => 1, upper_inclusive => 1, }, }
etc... The lower and upper values can either be numeric values or date values in the form mm/dd/yyyy or dd/mm/yyyy (see C<getSet> for Euro-formatted dates)
Examples:
my $set = $range->getSet(10); my $set = $range->getSet('1/14/2002', DATE_RANGE);
getSet returns 0 if the test value was not found to be a member of any set.
Note: Set::Range uses Date::Calc functions to convert the date to a datestamp. I settled on Date::Calc because Time::Local doesn't support years > 2038.
NUM_RANGE, DATE_RANGE, EU_DATE_RANGE, TIME_RANGE constants
|
|---|