for ( date2offset($start) .. date2offset($end) ) { push @{$effective[$_]}, \$data; } #### my $results = $effective[date2offset($date)]; # O(1) if ( defined($results) { # @$results is an array of all matching $data } #### sub date2offset { my($yyyymmdd) = @_; my $year = int($yyyymmdd/ 10000) - 1970; my $mmdd = $yyyymmdd % 10000; my $month = int($mmmdd / 100) - 1; my $day = $mmdd % 100 - 1; return $year * (12 * 31) + $month * 31 + $day; }