Perl Programmierung - Grundkurs
1;
}
my $data = $user{ $uid };
my ($luid, $group, $name) = split /$trenn/, $data;
print < Ich habe folgende Angaben ueber Sie gefunden:
Sie haben die numerische UID $luid
Ihr wirklicher Name ist $name
und Sie gehoeren zur Gruppe: $group
MARKE
dbmclose(%user)
or die "Kann Datenbank $dname
nicht schliessen: $!\n";
Das Schreiben ist etwas aufwändiger, weil wir zuerst alle Angaben erfragen müssen. Wenn die Benutzernummern nicht fortlaufend vergeben werden, müssen wir außerdem sicherstellen, dass wir keine Nummer zweimal eintragen. Hier hilft die bewährte Technik, mit einem Hash Buch zu führen.
Beispiel:
#!/usr/bin/perl -w
use strict;
# So etwas merkt man sich
# besser nur an einer Stelle!
# Das Trennzeichen ist ~~
my $trenn = '~~';
my $dname = 'userdb';
my %user;
dbmopen(%user,$dname,0644)
or die "Kann Datenbank $dname nicht oeffnen: $!\n";
print "Geben Sie die Benutzer-Kennung ein: ";
my $uid = ;
chomp $uid;
print "Geben Sie Ihren Namen ein: ";
my $name = ;
chomp $name;
print "Geben Sie Ihre Benutzergruppe ein: ";
my $group = ;
chomp $group;
# Laufende Nummer ermitteln
# Dazu alle vorhandenen Nummern in einem Hash sammeln
my %nummern;
my $anzahl=1;
while (my ($uid, $data) = each %user) {
my ($no) = split /$trenn/, $data,2;
++$nummern{$no};
++$anzahl;
}
# jetzt freie Nummer suchen.
# Dazu fangen wir mit 1 an und
# erhoehen so lange, bis keine bekannte
# Nummer mehr gefunden wird.
my $no = 1;
while (exists $nummern{$no}) { ++$no };
# Wegschreiben
$user { $uid } = join $trenn, $no, $group, $name;
# Mal wieder ein Hier-Dokument
print < Habe Sie mit der laufenden Nummer $no eingetragen!
Es gibt zurzeit $anzahl Benutzer, Sie eingeschlossen
MARKE
dbmclose(%user)
or die "Kann Datenbank $dname nicht schliessen: $!\n";
Weitere Kostenlose Bücher