Author image Dale Amon
and 1 contributors


 File::Spec::Dated - Object to parse dated archive filenames.


 use File::Spec::Dated;

 ($volume, $basepath, $directory, $startdate, $enddate, $name_body, @extensions) = $self->splitpath ($filepath);

 $startdate = $self->startdate;
 $enddate   = $self->enddate;
 $dates     = $self->dates;
 $undated   = $self->undated_filename;
 $name_body = $self->name_body;
 $self      = $self->set_startdate ($startdate);
 $self      = $self->set_enddate ($enddate);
 $self      = $self->set_name_body ($name_body);
 $name      = $self->reset_name;




Split a filename path into segments used by virtually all archiver applications. This includes the segmentation done by the File::Spec:Archivist plus a further breakdown of the filename part it returns.

For example, if the filename were 19901225-XMAS-Title-Subtitle-note.tar.gz would be further split as:

 startdate:         19991225
 enddate:           undef
 name_body:         XMAS-Title-Subtitle-note
 extensions:        (tar gz)
 extension:         gz

Extensions are re-parsed here with more constraints on what is considered an extension. It must not only be dot delimited, but also be left of the last - i the filename. Eve so, there is still an ambiguity problem to be dealt with here and in child classes. We cannot always be certain that an extension really is an extension. For example, if the filename were DATE-XYZ.ABC, it could be parsed in a number of ways:

          name_body:         XYZ
          extension:         ABC

or name_body: XYZ.ABC

The later may seem unlikely, but here are examples showing that it isn't:



 use File::Spec::Dated;
 my $baz        = File::Spec::Dated->new;
 my @list       = $baz->splitpath

 my $foo        = File::Spec::Dated->new

 my $startdate  = $foo->startdate;
 my $enddate    = $foo->enddate;
 my $dates      = $foo->dates;
 my $undated    = $obj->undated_filename;
 my $name_body  = $foo->name_body;
 my @extensions = $foo->extensions;
 my $extensions = $foo->extensions;
 my $extension  = $foo->extension;

 $foo->set_startdate  ("19901225120000");
 $foo->set_enddate    ("20001225120000");
 $foo->set_name_body  ("XMAS-Title-Subtitle-note");
 $foo->set_extensions ("jpeg" );
 my $name       = $foo->reset_name;
 my $filename   = $foo->reset_filename;
 my $filepath   = $foo->reset_pathname;
 my @parts      = $foo->reparse;

 $foo->set_extensions ("tar","gz");
 $filename      = $foo->reset_filename;
 $filepath      = $foo->reset_pathname;
 @parts         = $foo->reparse;

Class Variables


Instance Variables

 startdate         The starting date string.
 enddate           The ending date string.
 name_body         The "body" portion of the filename.
 extensions        A list, left to right, of all file extensions found.
 extension         Last or rightmost of the file extensions found.

Class Methods


Instance Methods

$dates = $obj->dates

Return a $dates string suitable for use in an index or table of contents, eg "19991225", "19991225103015", "19991225-20000101" or "19991225103000-19991225113000".

Returns undef if there is no date information associated with this filespec.

$enddate = $obj->enddate

Return the end date string or undef if none.

$name_body = $obj->name_body

Return the name_body or undef if none.

$name = $obj->reset_name

Regenerate name from parts:

        startdate + enddate + name_body -> name
$obj = $obj->set_enddate ($enddate)

Unconditionally set the end date of the filename.

$obj = $obj->set_name_body ($name_body)

Unconditionally set the name_body of the filename.

$obj = $obj->set_startdate ($startdate)

Unconditionally set the start date of the filename.

($volume, $basepath, $directory, $startdate, $enddate, $name_body, @extensions) = $obj->splitpath ($filepath)

Parses the filename into:


and returns all the elements of the pathname and filename as a list. Completely reinitializes the object for the name $filepath. Chains to parent class method.

$startdate = $obj->startdate

Return the start date string or undef if none.

$undated = $obj->undated_filename

If a filename has dates on the left, return the remainder; if there is no date part do nothing.

For example, whether the original filename is 20040817-filename.tar.gz or just filename.tar.gz it will return filename.tar.gz. This is useful in applications which deal with both Archivist and non-Archivist filenames and which may need to shift a file back and forth between the two universes.

Private Class Methods


Private Instance Methods

$obj = $obj->_init

Internal initializer. Chains to parent class method.

This method is for the subclass initializer chaining and should not be used otherwise.


 See TODO.


Fault::ErrorHandler, Fault::DebugPrinter, DMA::ISODate, DMA::FSM, File::Spec::BaseParse


Dale Amon <>

2 POD Errors

The following errors were encountered while parsing the POD:

Around line 370:

=back doesn't take any parameters, but you said =back 4

Around line 387:

=back doesn't take any parameters, but you said =back 4