Hallo
ich arbeite mit Perl unter Windows und bin noch in der
Lernphase - also seid nicht zu hart zu mir
Schon ok
Mal angenommen, ich will mir alle Files aus einem Verzeichnis
ausgeben lassen:
opendir(in,âC:/abc_verzeichnis/â);
@a=readdir(in);
close in;
foreach (@a) {
print $_ ."\n";
}
Dann hab ich das Problem, dass er mir aus âinâ immer auch die
Punkte ausliest:
Richtig.
Nun meine Frage, die ich mir durch googlen nicht beantworten
konnte. Gibt es fĂŒr readdir einen Parameter, der mir diese
Punkte nicht ausliest? Wenn nicht, muss ich eben die Ausgabe
bearbeiten, aber wÀr eben umstÀndlicher
Readdir liest ĂŒber das Betriebssystem immer alle
EintrÀge aus dem Verzeichnis aus. Man kann die
Ausgabe von readdir aber âfilternâ, sprich -
nur die EintrÀge in sein eigenes Array nehmen,
die man möchte.
FĂŒr Perl wĂ€re das der 'grep-Operator:
my @fnames = grep ! /^\.{1,2}$/, readdir $dh;
grep ==\> http://perldoc.perl.org/functions/grep.html
! ==\> lasse Eintrag durch, wenn Bedingung nciht zutrifft
/^\.{1,2}$/ ==\> regulÀrer Ausdruck, ^ (Stringanfang), \. Punkt
als Zeichen '.', mindestens 1 mal, maximal 2 mal,
also '.' und '..', $ = Stringende
Dein Programm sÀhe dann etwa so aus:
use strict;
use warnings;
my $dirname = 'C:/abc\_verzeichnis/';
opendir my $dh, $dirname or die "$dirname geht nicht, $!";
my @fnames = grep ! /^\.{1,2}$/, readdir $dh;
close $dh;
print join "\n", @fnames;
Du kannst Dir auch mal http://perldoc.perl.org/File/Glob.html
und http://perldoc.perl.org/functions/glob.html
ansehen.
GrĂŒĂe
CMb