home *** CD-ROM | disk | FTP | other *** search
- package DirHandle;
-
- =head1 NAME
-
- DirHandle - supply object methods for directory handles
-
- =head1 SYNOPSIS
-
- use DirHandle;
- $d = new DirHandle ".";
- if (defined $d) {
- while (defined($_ = $d->read)) { something($_); }
- $d->rewind;
- while (defined($_ = $d->read)) { something_else($_); }
- undef $d;
- }
-
- =head1 DESCRIPTION
-
- The C<DirHandle> method provide an alternative interface to the
- opendir(), closedir(), readdir(), and rewinddir() functions.
-
- The only objective benefit to using C<DirHandle> is that it avoids
- namespace pollution by creating globs to hold directory handles.
-
- =cut
-
- require 5.000;
- use Carp;
- use Symbol;
-
- sub new {
- @_ >= 1 && @_ <= 2 or croak 'usage: new DirHandle [DIRNAME]';
- my $class = shift;
- my $dh = gensym;
- if (@_) {
- DirHandle::open($dh, $_[0])
- or return undef;
- }
- bless $dh, $class;
- }
-
- sub DESTROY {
- my ($dh) = @_;
- closedir($dh);
- }
-
- sub open {
- @_ == 2 or croak 'usage: $dh->open(DIRNAME)';
- my ($dh, $dirname) = @_;
- opendir($dh, $dirname);
- }
-
- sub close {
- @_ == 1 or croak 'usage: $dh->close()';
- my ($dh) = @_;
- closedir($dh);
- }
-
- sub read {
- @_ == 1 or croak 'usage: $dh->read()';
- my ($dh) = @_;
- readdir($dh);
- }
-
- sub rewind {
- @_ == 1 or croak 'usage: $dh->rewind()';
- my ($dh) = @_;
- rewinddir($dh);
- }
-
- 1;
-