Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2
db-tierdbm.pl
#!/usr/local/bin/perl -w
# db-tierdbm.pl -- Persistente Hashes auf Datenbanktabellen: Tie::RDBM
use Tie::RDBM;
tie %uxpw, 'Tie::RDBM', 'mysql:test', { table => 'uxpass', create => 1 }
or die "can't tie: $!\n";
open(PASSWD, "< /etc/passwd") or die "can't open: $!\n";
while (<PASSWD>) {
chomp; my @f = split(/:/);
foreach my $f (@f) { undef $f if defined $f and $f eq '' };
# Wir speichern unsere komplexe Datenstruktur ab:
$uxpw{$f[0]} = { uid => $f[2], gid => $f[3],
gcos => defined $f[4] ? [ split /,/, $f[4] ] : [],
home => $f[5], shell => $f[6] };
# Fuer normale Abfragen durch andere Tools, wie z.B. mysql,
# fuegen wir stringifizierte Eintraege hinzu [optional]:
$uxpw{$f[0] . "_str"} = join(':', @f[0,2,3]);
$found{$f[0]} = 1;
}
close(PASSWD);
# Wir loeschen alle Eintraege, die nicht mehr vorhanden sind:
while (($key, undef) = each(%uxpw)) {
next if $key =~ /_str$/;
unless (exists $found{$key}) {
delete $uxpw{$key};
delete $uxpw{$key . "_str"};
}
}
# MySQL kennt keine Transaktionen, sonst haetten wir sagen sollen:
# tied(%uxpw)->commit(); # Wenn alles okay ist.
# tied(%uxpw)->rollback(); # Nein, wir wollen es doch nicht.
# Wir aendern unter MySQL eine komplexe Datenstruktur:
tied(%uxpw)->{'dbh'}->do("LOCK TABLES uxpass WRITE");
die "Error: $DBI::errstr\n" if $DBI::err;
$tmpgcos = $uxpw{$ENV{'USER'}};
push(@{$tmpgcos->{'gcos'}}, "Test added " . localtime(time));
$uxpw{$ENV{'USER'}} = $tmpgcos;
tied(%uxpw)->{'dbh'}->do("UNLOCK TABLES");
die "Error: $DBI::errstr\n" if $DBI::err;
# Nun geben wir noch unseren Eintrag aus:
use Data::Dumper;
print Dumper($uxpw{$ENV{'USER'}});
# Das war's, Leute!
untie %uxpw;
[Prev] [Up] [Relevant Chapter] [Next]
[Alte Quelle]
| Last modified: $Date: 2006/05/18 12:55:55 $ FH. Search :: Sitemap :: Disclaimer :: Copyright :: Privacy |
|