Analog zu lexikalischen Filehandles besitzt Perl lexikalische
Dirhandles. Eine Dirhandle ist ein Iterator über einem Verzeichnis.
Die Operationen auf Dirhandles lassen sich objektorientiert kapseln.
Hier eine entsprechende Klasse Dirhandle mit drei
Methoden: new() (Directory öffnen), close() (Directory
schließen) und next() (nächster Directory-Eintrag):
1 |
package Dirhandle; |
2 |
|
3 |
use strict; |
4 |
use warnings; |
5 |
|
6 |
sub new { |
7 |
my ($class,$dir) = @_; |
8 |
|
9 |
opendir my $dh,$dir or die "ERROR: opendir failed: $dir ($!)\n"; |
10 |
return bless $dh,$class; |
11 |
} |
12 |
|
13 |
sub close { |
14 |
my $self = shift; |
15 |
|
16 |
closedir $self or die "ERROR: closedir failed ($!)\n"; |
17 |
return; |
18 |
} |
19 |
|
20 |
sub next { |
21 |
return readdir shift; |
22 |
} |
23 |
|
24 |
1; |
25 |
|
26 |
# eof |
Beispiel: Gib alle Einträge des Verzeichnisses $dir auf
STDOUT aus
1 use Dirhandle;
2
3 my $dh = Dirhandle->new($dir);
4 while (my $entry = $dh->next) {
5 say $entry;
6 }
7 $dh->close;
Das Dirhandle-Objekt $dh kann wie jede normale Dirhandle an
die Perl-Builtins readdir(), telldir(), seekdir(),
rewinddir(), closedir() übergeben werden.