regex is a regular expression that should capture elements of the datetime string. This is a required element. This is the key whose presence indicates it's a specification that belongs to this class.

params is an arrayref of key names. The captures from the regex are mapped to these ($1 to the first element, $2 to the second, and so on) and handed to DateTime->new(). This is a required element.

extra is a hashref of extra arguments you wish to give to DateTime->new(). For example, you could set the year or time_zone to defaults:

extra => { year => 2004, time_zone => "Australia/Sydney" },

constructor is either an arrayref or a coderef. If an arrayref then the first element is a class name or object, and the second element is a method name (or coderef since Perl allows that sort of thing). The arguments to the call are anything in $p and anything given in the extra option above.

If only a coderef is supplied, then it is called with arguments of $self, $p and extra.

In short:

$self->$coderef( %$p, %{ $self->{extra} } );

The method is expected to return a valid DateTime object, or undef in event of failure, but can conceivably return anything it likes. So long as it's 'true'.