package File::FTS;

use strict;

use File::Spec;

use vars qw($VERSION);

$VERSION = '0.04';

sub new {
    my ($class, $base) = @_;
    bless [{'dir' => $base}], $class;
}

sub Dive {
    my $self = shift;
    my $this = $self->[-1];
    return undef unless $this;
    my $files;
    unless ($files = $this->{'files'}) {
        local(*DIR);
        opendir(DIR, $this->{'dir'});
        my @files_list = readdir(DIR);
        $files = $this->{'files'} = \@files_list;
        closedir(DIR);
    }
    my $item = shift(@$files);
    unless (defined($item)) {
        pop @$self;
        return $self->Dive;
    }
    if ($item eq "." || $item eq "..") {
        return $self->Dive;
    }    
    my $name = File::Spec->catfile($this->{'dir'}, $item);
    unless (-d $name) {
        return $name;
    }
    if (-l $name) {
        return $self->Dive;
    }
    push(@$self, {'dir' => $name});
    return $name;
    # return $self->Dive;
}

1;
__END__


=head1 NAME

FTS - Perl extension for File Traversing System

=head1 IMPORTANT NOTE!

This module is depcrecated and no longer actively maintained, except for some
maintenance. It is kept on CPAN for backwards compatibility. You should look 
at L<File::Find::Object> instead, which is more complete and more actively 
maintained.

=head1 SYNOPSIS

  use File::FTS;
  my $fts = new File::FTS("/usr/local");
  while (my $file = $fts->Dive) {
      print "$file\n";
  }

=head1 DESCRIPTION

This is similar to File::Find, but works non recursively.
Symbolic links to directories are skipped.

Inspired by the BSD fts library.

=head1 FUNCTIONS

=head2 my $fts = File::FTS->new($dir)

Constructs a new File::FTS object that operates on the directory $dir.

=head2 my $file = $fts->Dive()

Returns the next file.

=head1 AUTHOR

Original Author: Ariel Brosh, L<http://search.cpan.org/author/SCHOP/> (Ariel
has unexpectdly passed away and this module has been adopted by others)

Current Maintainer: Shlomi Fish, L<http://search.cpan.org/author/SHLOMIF/>

=head1 SEE ALSO

perl(1), L<File::Find>, fts(3), L<File::Find::Object>.

=head1 LICENSE

This module did not contain any license information when I inherited it
from its deceased author. According to my interpretation it is licensed
according to the terms of perl5 itself.

=cut


syntax highlighted by Code2HTML, v. 0.9.1