#!/usr/bin/perl use strict; use warnings; use POSIX qw/strftime/; # fuer Monat und Jahr my $maxalter = 5;               # maximales Alter in Wochen my $gesamtdaten = 'alldata.dat'; my $neuedaten = 'newdata.dat'; my $backupsuffix = '.bak';      # Suffix fuer Backup der Daten my $backupdaten = $gesamtdaten.$backupsuffix; my $tmpsuffix = '.tmp';         # Suffix fuer temp. Datei my $tmpdaten = $gesamtdaten.$tmpsuffix; # Aktuelles Jahr und Woche ermitteln (Jahr vierstellig und Woche nach ISO 8601:1988) my $jahrwoche = strftime ("%Y%V", localtime); # Temporaere Datei fuer Ausgabe oeffnen open my $tmpdaten_fh, '>', $tmpdaten    or die "Kann $tmpdaten nicht zum Schreiben oeffnen: $!"; # Alte Daten kopieren open my $gesamtdaten_fh, '<', $gesamtdaten    or die "Kann $gesamtdaten nicht zum Lesen oeffnen: $!"; while (my $line = <$gesamtdaten_fh>) {    # Jahr/Woche am Zeilenende?    if ($line =~ /(\d{6})$/) {        # Zeile ueberspringen, wenn zu alt        next if $1 < $jahrwoche - $maxalter;    } else {        warn "Keine Datumsangabe am Ende von Zeile $. in $gesamtdaten, kopiere trotzdem!";    }    print $tmpdaten_fh $line; } close $gesamtdaten_fh or die "Kann $gesamtdaten nicht schliessen: $!"; # Neue Daten anhaengen open my $neuedaten_fh, '<', $neuedaten    or die "Kann $neuedaten nicht zum Lesen oeffnen: $!"; print $tmpdaten_fh (<$neuedaten_fh>); close $neuedaten_fh or die "Kann $neuedaten nicht schliessen: $!"; # Das war's mit Schreiben close $tmpdaten_fh or die "Kann $tmpdaten nicht schliessen: $!"; # Datei mit vorhandenen Daten umbenennen (als Backup) rename $gesamtdaten, $backupdaten    or die "Kann $gesamtdaten nicht in $backupdaten umbenennen: $!"; # Datei mit neuen Gesamtdaten in alten Namen umbenennen rename $tmpdaten, $gesamtdaten    or die "Kann $tmpdaten nicht in $gesamtdaten umbenennen: $!"; # Ende exit 0;