* oder ? enthält. So liefert
ls -1 *.html
eine einspaltige Liste aller Files, die auf .html enden.
Einen analogen Mechanismus gibt es in Perl durch die Funktion glob() sowie den sog. Rhombus-Operator <>. Obiges Shell-Beispiel läßt sich dann wie folgt implementieren:
#!/usr/local/bin/perl -w
foreach $filename (glob("*.html")) {
print $filename."\n"
}
|
Oder auch:
#!/usr/local/bin/perl -w
foreach $filename (<*.html>) {
print $filename."\n"
}
|
Man kann auch die Fileliste direkt an ein Array übergeben:
#!/usr/local/bin/perl -w
@fileliste = glob("*.html");
foreach $filename (@fileliste) {
print $filename."\n"
}
|
Selbst Variablen können im Dateimuster verwendet werden:
#!/usr/local/bin/perl -w
$pfad = 'perl';
@fileliste = <$pfad/*.html>;
foreach $filename (@fileliste) { print $filename."\n" }
$muster = '*.html';
@fileliste = <${muster}>; # Spezialfall ...
foreach $filename (@fileliste) { print $filename."\n" }
|
Im obigen Beispiel muß im zweiten Teil <${muster}> anstelle von <$muster> stehen, da hier eine Variable alleine im Rhombus-Operator steht.
Wer es etwas genauer wissen will: in einem Ausdruck wie Beispiel: <$muster> wird $muster als "indirektes Filehandle" betrachtet. Damit kann man beispielsweise Filehandles als Parameter an Unterprogramme übergeben.
#!/usr/local/bin/perl -w
open(FILE,'test.dat');
print_file(\*FILE);
close(FILE);
sub print_file {
my $handle = $_[0];
while(<$handle>) { print }
}
|
Beispiel:
#!/usr/local/bin/perl -w
opendir(DIR,"perl");
while($datei = readdir(DIR)) { print $datei."\n" }
closedir(DIR);
|
Mit opendir() wird dabei das Verzeichnis geöffnet. Das erste Argument ist hierbei das sog. "Directoryhandle", dessen Name (aus Gründen der Konvention) aus Großbuchstaben bestehen sollte. Die Funktion readdir() liefert dann die einzelnen Einträge des Ordners. closedir() schließlich beendet den Zugriff auf das Verzeichnis.
Das aktuelle Verzeichnis kann durch `pwd` bestimmt werden. Zu beachten sind hier die sog. backquotes (``) ! Sie bewirken, daß die eingeschlossene Zeichenkette als Kommando an das Betriebssytem weitergegeben wird. Das Ergebnis des Kommandos wird dann zurückgeliefert.
Beispiel:
#!/usr/local/bin/perl -w $akt_verz = `pwd`; print "aktuelles Verzeichnis : $akt_verz\n"; |
Ein Verzeichniswechsel ist durch die Funktion chdir() möglich. Dies ist allerdings abhängig vom Betriebssystem, unter dem Perl gerade läuft, wobei insbesondere auf das Zeichen zu achten ist, das Datei-/Verzeichnisnamen im Pfad voneinander trennt.
Als Beispiel seien hier UNIX und MacOS gegenübergestellt:
| UNIX | MacOS
----------------------+-------------------+---------------------
Pfad-Trennzeichen | / | :
| |
Wechseln in höheres | chdir('..'); | chdir('::');
Verzeichnis | |
| |
Öffnen des aktuellen | opendir(ABC,'.'); | opendir(ABC,':');
Verzeichnisses | |
rename()
#!/usr/local/bin/perl -w
rename("alter_name","neuer_name");
|
unlink()
#!/usr/local/bin/perl -w
unlink("dateiname");
|
mkdir()
#!/usr/local/bin/perl -w
$permissions = 0777;
mkdir("dirname",$permissions);
|
rmdir()
#!/usr/local/bin/perl -w
rmdir("dirname");
|
link()
#!/usr/local/bin/perl -w
link("filename","linkname");
|
symlink()
#!/usr/local/bin/perl -w
symlink("filename","linkname");
|
chmod()
#!/usr/local/bin/perl -w
$permissions = 0755;
chmod($permissions,"prog_1","prog_2","prog_3");
|
chown()
#!/usr/local/bin/perl -w
$uid = 4987; # Benutzer-ID
$gid = 33; # Gruppen-ID
chown($uid,$gid,"datei");
|
utime()
#!/usr/local/bin/perl -w
$access = 812_000_000; # letzter Zugriff
$modif = 822_000_000; # letzte Aenderung
utime($access,$modif,"datei");
|
Die Zeiten sind hierbei in Sekunden seit dem 1.1.1970 anzugeben. Die aktuelle Systemzeit kann über den Operator time abgefragt werden:
#!/usr/local/bin/perl -w
print "Seit dem 1.1.1970 sind ";
print time;
print " Sekunden vergangen.\n";
|
| Autor: Eike Grote | Letzte Änderung: 02.10.1997 |