Provided by: libbadger-perl_0.16-3_all bug

NAME

       Badger::Filesystem::Directory - directory object

SYNOPSIS

           # using either of Badger::Filesytem constructor subroutines
           use Badger::Filesystem 'Dir Directory';

           # use native OS-specific paths:
           $dir = Dir('/path/to/dir');

           # or generic OS-independent paths
           $dir = Dir('path', 'to', 'dir');

           # Dir is short for Directory if you prefer longness
           $dir = Directory('/path/to/dir');
           $dir = Directory('path', 'to', 'dir');

           # manual object construction
           use Badger::Filesystem::Directory;

           # positional arguments
           $dir = Badger::Filesystem::Directory->new('/path/to/file');
           $dir = Badger::Filesystem::Directory->new(['path', 'to', 'file']);

           # named parameters
           $dir = Badger::Filesystem::Directory->new(
               path => '/path/to/dir'              # native
           );
           $dir = Badger::Filesystem::Directory->new(
               path => ['path', 'to', 'dir']       # portable
           );

           # path inspection methods
           $dir->path;                     # full path
           $dir->directory;                # same as path()
           $dir->dir;                      # alias to directory()
           $dir->base;                     # same as path()
           $dir->volume;                   # path volume (e.g. C:)
           $dir->is_absolute;              # path is absolute
           $dir->is_relative;              # path is relative
           $dir->exists;                   # returns true/false
           $dir->must_exist;               # throws error if not
           @stats = $dir->stat;            # returns list
           $stats = $dir->stat;            # returns list ref

           # path translation methods
           $dir->relative;                 # relative to cwd
           $dir->relative($base);          # relative to $base
           $dir->absolute;                 # relative to filesystem root
           $dir->definitive;               # physical file location
           $dir->collapse;                 # resolve '.' and '..' in $file path

           # path comparison methods
           $dir->above($another_path);     # $dir is ancestor of $another_path
           $dir->below($another_path);     # $dir is descendant of $another_path

           # directory manipulation methods
           $dir->create;                   # create directory
           $dir->delete;                   # delete directory
           $fh = $dir->open;               # open directory to read

           # all-in-one read/write methods
           @data  = $dir->read;             # return directory index
           @kids  = $dir->children;         # objects for each file/subdir
           @files = $dir->files;            # objects for each file in dir
           @dirs  = $dir->dirs;             # objects for each sub-dir in dir
           @dirs  = $dir->directories;      # same as dirs()

DESCRIPTION

       The "Badger::Filesystem::Directory" module is a subclass of Badger::Filesystem::Path for
       representing directories in a file system.

       You can create a file object using the "Dir" constructor function in Badger::Filesystem.
       This is also available as "Directory" if you prefer longer names.

           use Badger::Filesystem 'Dir';

       Directory paths can be specified as a single string using your native filesystem format or
       as a list or reference to a list of items in the path for platform-independent paths.

           my $dir = Dir('/path/to/dir');

       If you're concerned about portability to other operating systems and/or file systems, then
       you can specify the directory path as a list or reference to a list of component names.

           my $dir = Dir('path', 'to', 'dir');
           my $dir = Dir(['path', 'to', 'dir']);

METHODS

       In addition to the methods inherited from Badger::Filesystem::Path, the following methods
       are defined or re-defined.

   init(\%config)
       Customised initialisation method specific to directories.

   exists
       Returns true if the directory exists in the filesystem.  Returns false if the directory
       does not exists or if it is not a directory (e.g. a file).

   is_directory() / is_dir()
       This method returns true for all "Badger::Filesystem::Directory" instances.

   volume() / vol()
       Returns any volume defined as part of the path.  This is most commonly used on Win32
       platforms to indicate drive letters, e.g. "C:".

           # on MS Windows
           print Dir('C:\\foo\\bar')->volume;   # C

   base()
       This always returns $self for directories.

   canonical()
       This returns the canonoical representation of the directory path.  This is the absolute
       path with a trailing slash added (or whatever the relevant directory separator is for your
       filesystem).

           print Dir('/foo/bar')->canonical;   # /foo/bar/

   directory() / dir()
       Returns the complete directory path when called without arguments. This is effectively the
       same thing as "path()" or "base()" returns, given that this object is a directory.

       This can also be used with an argument to locate another directory relative to this one.

           my $dir = Dir('/path/to/dir');
           print $dir->dir;                    # /path/to/dir (auto-stringified)
           print $dir->dir('subdir');          # /path/to/dir/subdir (ditto)

       Directories are returned as new "Badger::Filesystem::Directory" objects.  The above
       examples are relying on the auto-stringification to display the path when printed.

   file($name)
       This method can be used to locate a file relative to the directory.  The file is returned
       as a Badger::Filesystem::File object.

           my $dir  = Dir('/path/to/dir');
           my $file = $dir->file('example.txt');
           print $file->path;                  # /path/to/dir/example.txt
           print $file;                        # same (auto-stringified)

   create()
       This method can be used to create the directory if it doesn't already exist.

           Dir('/path/to/dir')->create;

   delete()
       This method deletes the directory permanently.  Use it wisely.

           Dir('/tmp/junk')->delete;

   mkdir($subdir)
       This method can be used to create a sub-directory.

           my $dir = Dir('/tmp');
           $dir->mkdir('junk');                # /tmp/junk

       When called without an argument it has the same effect as create() in creating itself.

           my $dir = Dir('/tmp/junk');
           $dir->mkdir;                        # same as $dir->create

   rmdir($subdir);
       This does the opposite of mkdir() but works in the same way.  It can be used to delete a
       sub-directory:

           my $dir = Dir('/tmp');
           $dir->rmdir('junk');                # /tmp/junk

       Or the directory itself when called without an argument:

           my $dir = Dir('/tmp/junk');
           $dir->rmdir;                        # same as $dir->delete

   open()
       This method opens the directory and returns an IO::Dir handle to it.

           $fh = $dir->open;
           while (defined($item = $fh->read)) {
               print $item, "\n";
           }

   read($all)
       This method read the contents of the directory.  It returns a list (in list context) or a
       reference to a list (in scalar context) containing the names of the entries in the
       directory.

           my @entries = $dir->read;           # list in list context
           my $entries = $dir->read;           # list ref in scalar context

       By default, the "." and ".." directories (or the equivalents for your file system) are
       ignored.  Pass a true value for the $all flag if you want them included.

   children($all)
       Returns the entries of a directory as Badger::Filesystem::File or
       Badger::Filesystem::Directory objects.  Returns a list (in list context) or a reference to
       a list (in scalar context).

           my @kids = $dir->children;          # list in list context
           my $kids = $dir->children;          # list ref in scalar context

   files()
       Returns a list (in list context) or a reference to a list (in scalar context) of all the
       files in a directory as Badger::Filesystem::File objects.

           my @files = $dir->files;            # list in list context
           my $files = $dir->files;            # list ref in scalar context

   directories() / dirs()
       Returns a list (in list context) or a reference to a list (in scalar context) of all the
       sub-directories in a directory as Badger::Filesystem::Directory objects.

           my @dirs = $dir->dirs;              # list in list context
           my $dirs = $dir->dirs;              # list ref in scalar context

   visit($visitor)
       Entry point for a filesystem visitor for visit a directory. A reference to a
       Badger::Filesystem::Visitor object (or subclass) should be passed as the first argument.

           use Badger::Filesystem::Visitor;

           my $visitor = Badger::Filesystem::Visitor->new( in_dirs => 1 );
           $dir->visit($visitor);

       Alternately, a list or reference to a hash array of named parameters may be provided.
       These will be used to instantiate a new Badger::Filesystem::Visitor object (via the
       Badger::Filesystem visitor() method) which will then be applied to the directory. If no
       arguments are passed then a visitor is created with a default configuration.

           # either list of named params
           $dir->visit( in_dirs => 1 );

           # or reference to hash array
           $dir->visit({ in_dirs => 1});

       The method then calls the visitor visit() passing $self as an argument to begin visiting
       the directory.

   accept($visitor)
       This method is called to dispatch a visitor to the correct method for a filesystem object.
       In the Badger::Filesystem::Directory class, it calls the visitor visit_directory() method,
       passing the $self object reference as an argument.

   enter($visitor)
       This is a custom variant of the accept() method which is called by a visitor when it first
       enters a filesystem. Instead of calling the visitor visit_directory() method, it calls
       visit_directory_children() passing $self as an argument to begin visiting the files and
       sub-directories contained in this directory.

AUTHOR

       Andy Wardley <http://wardley.org/>

COPYRIGHT

       Copyright (C) 2005-2009 Andy Wardley. All rights reserved.

ACKNOWLEDGEMENTS

       The "Badger::Filesystem" modules are built around a number of existing Perl modules,
       including File::Spec, File::Path, Cwd, IO::File, IO::Dir and draw heavily on ideas in
       Path::Class.

       Please see the ACKNOWLEDGEMENTS in Badger::Filesystem for further information.

SEE ALSO

       Badger::Filesystem, Badger::Filesystem::Path, Badger::Filesystem::File,
       Badger::Filesystem::Visitor.