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" #### 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) #### my $set = $range->getSet(10); my $set = $range->getSet('1/14/2002', DATE_RANGE);