#!/usr/bin/perl # vi: set ts=4 sw=4 sts=2 et: use strict; use warnings; # Author: linuxer # Date: 21. February 2008 # Description: # einfache schueler verwaltung # # http://board.perl-community.de/thread/11343/#MSG0 # http://www.perlboard.de/cgi-bin/perlboard.pl?action=show_topic&id=9567&ant=2 #> global variables (the less you use, the better the script) #> -------------------------------------------------------------------------- our $VERSION = '0.01'; my $datafile = 'daten.txt'; #> sub routines #> -------------------------------------------------------------------------- # define any used sub routine before main() # Subroutine: lese Daten aus Datei und liefere Daten in einem Hash-of-Hash zurueck sub read_data_to_hash { my $filename = shift; my %schueler = (); # 3-argument-open ist sicherer; $! enthaelt die Systemfehlermeldung open my $readh, '<', $filename or die "open(ro) $filename: $!\n"; # zeilenweise lesen while ( my $line = <$readh> ) { # am Tab splitten; nur in 3 Felder splitten my ($name, $ort, $note ) = split /\t/, $line, 3; # in hash eintragen $schueler{$name} = { 'ort' => $ort, 'note' => $note, }; } close $readh or die "close(ro) $filename: $!\n"; return %schueler; } #> main script #> -------------------------------------------------------------------------- # neu einzutragender schueler... (sollte optimiert werden) my $name = 'Fritz'; my $ort = 'Musterhausen'; my $note = 2; # datei auslesen und Hash %schueler fuellen my %schueler = read_data_to_hash( $datafile ); # wenn wir den Schueler $name noch nicht kennen, # dann haengen wir die Daten ans Dateiende if ( !exists $schueler{$name} ) { # schreiben daten ans Dateiende open my $writeh, '>>', $datafile or die "open(wr) $datafile: $!\n"; printf {$writeh} "%s\t%s\t%s\n", $name, $ort, $note or die "print to $datafile: $!\n"; close $writeh or die "close(wr) $datafile: $!\n"; } # __END__