Perl Programmierung - Grundkurs
zwei Funktionen benötigt:
- Die Funktion dbmopen öffnet eine Datei und verbindet sie mit einem Hash. Verbinden bedeutet, dass sich jede Änderung an dem Hash auswirkt, als wäre sie direkt mit der Datei gemacht worden.
- Die Funktion dbmclose schliesst die Datei ordungsgemäss und speichert datei letzte Daten.
Beispiel:
my %hash;
my $dateiname = MeineDateinbank;
dbmopen(%hash, $dateiname, 0644) or die "Kann Datenbank $dateiname nicht oeffnen: $!\";
$hash{Hans} = "Meier";
$hash{Otto} = "Schmitt";
dbmclose(%hash) or die "Kann Datenbank $dateiname nicht schliessen: $!";
Die Funktion dbmopen hat 3 Parameter:
- Eine Hash-Variable
- Den Namen der Datei, in der die Hash-Variable gespeichert werden soll
- Die Zugriffsrechte für diese Datei
löschen eines Paares aus dem Hash:
delete $hash{Hans};
Um einen Hash Schritt für Schritt zu durchlaufen gibt es die Funktion each:
while(($schluessel, $wert) = each %hash) {
print "Der Wert zum Schlüssel $schluessel ist
$wert\n";
}
Dateioperatoren und Verzeichnisse
Dateitestoperatoren
Die wichtigsten Dateioperatoren sind –e für die Prüfung der Existenz, -d, um Verzeichnisse zu erkennen und –f, um Dateien zu finden, die keine Verzeichnisse sind.
my $pfad = "/tmp/hilfe.txt";
if (-e $pfad) {
print "$pfad existiert\n";
}
Tabelle der der wichtigsten Dateitestoperatoren
Operator
Bedeutung
-e
Datei existiert
-z
Datei hat Länge 0
-s
Datei hat Länge ungleich 0 – gibt Länge zurück
-f
Datei ist eine "normale" Datei also kein Verzeichnis
-d
Datei ist ein Verzeichnis
-T
Datei ist eine Textdatei
-A
Alter der Datei seit letztem Zugriff
if (-e $pfad) {print "$pfad existiert\n";}
if (-f $pfad) {print "$pfad ist eine gewoehniche Datei\n";}
if (-d $pfad) {print "$pfad ist ein Verzeichnis\n";}
Die Datei-Testoperatoren lassen sich auch auf Datei-Handle anwenden:
open DATEI, $meine_datei;
print –A DATEI, "\n":
Muster im Namen von Dateinamen erkennen
Die Funktion glob nimmt ein Muster als Parameter und gibt eine Liste mit allen Dateien zurück, für die das Muster zutrifft.
*
Alle Dateien, beliebige Zeichenfolge
a*
Alle Dateien, die mit a beginnen
?
Alle Dateien mit einem beliebigen Zeichen
?.?
Alle Dateien mit der Form a.b
a* b*
Alle Dateien, die entweder mit a oder b anfangen
my @dateien = glob("*");
my @l_dateien = glob("l"*);
versteckte Punktdateien unter UNIX finden
my @versteckt = glob(".*");
my $muster = ; # Muster einlesen
chomp($muster); # Zeilenende abschneiden
@sammeln = glob($muster); # Dateien aufsammeln
Verzeichnis-Handler
Die Verzeichis-Handler sind opendir, readdir, und closedir.
Verzeichnis lesen
opendir VERZEICHNIS, $name
or die "Kann Verzeichnis nicht oeffnen: $!\n";
my @liste = readdir VERZEICHNIS;
closedir VERZEICHNIS;
In der Liste stehen dann alle Dateien, die in diesem Verzeichnis enthalten sind.
Datei für Datei
Wenn Sie readdir in einem skalen Kontext aufrufen, bekommen Sie die Dateien eine nach der anderen und schliesslich undef, wenn nichts mehr zu lesen ist.
opendir VERZEICHNIS, $name
or die "Kann Verzeichnis nicht oeffnen: $!\n";
while(my $skalar = readdir VERZEICHNIS) {
print "$skalar\n";
}
closedir VERZEICHNIS;
Verzeichnisse verändern
Funktionen zum bearbeiten von Verzeichnissen
Name
Bedeutung
mkdir
Verzeichnis erzeugen
unlink
Verzeichnis löschen
rename
umbenennen
chmod
Rechte verändern
chown
Eigentümer verändern
utime
Zeitstempel verändern
Ein Verzeichnis erzeugen
mkdir("/tmp/hilfsverzeichnis", 0777)
or die "Kann das Verzeichnis nicht anlegen: $!\n";
Zugriffsrechte verändern
Da die Funktion eine Liste von Dateien akzeptiert, wird als erster Parameter das gewünschte Zugriffsrecht angegben, gefolgt von der Liste der Dateinamen
my anz = chmod 0777, "/tmp/datei1 /tmp/mydatei";
if ($anz < 2) {
print STDERR "Konnte nicht alle Dateien bearbeiten: $!\n";
Eigentümer verändern
Die Funktion setzt den Besitzer und die Gruppe
Weitere Kostenlose Bücher