---
name: "Set::Infinite::_recurrence"
section: "3pm"
platform: "linux"
package: "perl-datetime-set"
version: "0.3900-5"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Set::Infinite::_recurrence"
---

# Set::Infinite::\_recurrence(3pm)

Extends Set::Infinite with recurrence functions

## NAME

Set::Infinite::\_recurrence - Extends Set::Infinite with recurrence functions

## SYNOPSIS

```
    $recurrence = $base_set->_recurrence ( \&next, \&previous );
```

## DESCRIPTION

This is an internal class used by the DateTime::Set module. The API is subject to change.

It provides all functionality provided by Set::Infinite, plus the ability to define recurrences with arbitrary objects, such as dates.

## METHODS

- •

  \_recurrence ( \\&next, \\&previous )

  Creates a recurrence set. The set is defined inside a 'base set'.

  ```
     $recurrence = $base_set->_recurrence ( \&next, \&previous );
  ```

  The recurrence functions take one argument, and return the 'next' or  the 'previous' occurrence.

  Example: defines the set of all 'integer numbers':

  ```
      use strict;
      use Set::Infinite::_recurrence;
      use POSIX qw(floor);
      # define the recurrence span
      my $forever = Set::Infinite::_recurrence->new(
          Set::Infinite::_recurrence::NEG_INFINITY,
          Set::Infinite::_recurrence::INFINITY
      );
      my $recurrence = $forever->_recurrence(
          sub {   # next
                  floor( $_[0] + 1 )
              },
          sub {   # previous
                  my $tmp = floor( $_[0] );
                  $tmp < $_[0] ? $tmp : $_[0] - 1
              },
      );
      print "sample recurrence ",
            $recurrence->intersection( -5, 5 ), "\n";
      # sample recurrence -5,-4,-3,-2,-1,0,1,2,3,4,5
      {
          my $x = 234.567;
          print "next occurrence after $x = ",
                $recurrence->{param}[0]->( $x ), "\n";  # 235
          print "previous occurrence before $x = ",
                $recurrence->{param}[2]->( $x ), "\n";  # 234
      }
      {
          my $x = 234;
          print "next occurrence after $x = ",
                $recurrence->{param}[0]->( $x ), "\n";  # 235
          print "previous occurrence before $x = ",
                $recurrence->{param}[2]->( $x ), "\n";  # 233
      }
  ```

- •

  is\_forever

  Returns true if the set is a single span,  ranging from -Infinity to Infinity.

- •

  \_is\_recurrence

  Returns true if the set is an unbounded recurrence,  ranging from -Infinity to Infinity.

## CONSTANTS

- •

  INFINITY

  The `"Infinity"` value.

- •

  NEG\_INFINITY

  The `"-Infinity"` value.

## SUPPORT

Support is offered through the `"datetime@perl.org"` mailing list.

Please report bugs using rt.cpan.org

## AUTHOR

Flavio Soibelmann Glock \<fglock@gmail.com\>

The recurrence generation algorithm is based on an idea from Dave Rolsky.

## COPYRIGHT

Copyright (c) 2003 Flavio Soibelmann Glock. All rights reserved. This program is free software; you can distribute it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the LICENSE file included with this module.

## SEE ALSO

Set::Infinite

DateTime::Set

For details on the Perl DateTime Suite project please see \<http://datetime.perl.org\>.
