*
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 |