alligator: Zeilen löschen ----

Beitrag lesen

Hi zusammen,

ich hab folgendes Problem.
Ich überprüfe X-Text-Dateien auf ihre MB - Größe
und wenn sie eine bestimmte Größe überschreiten, dann lösche ich die Datei bis auf die letzten X Zeilen.

Bis jetzt hab ich:

1 #!/usr/bin/perl -w2 use strict;3 4 my $dir = "."; 5 my $zeile = 10;6 my @array;7 8 opendir(DIR,"$dir")|| die "Kann Pfad nicht oeffnen $!";9 @array = readdir (DIR);10 closedir(DIR);11 #@array = glob("*.txt");12 13 14 foreach (@array)15 {16    17    if (($_ =~ /.txt$/)&& (300000 < (-<span class="operator">s "$_")))18    {19       my @dummy;20       open (DATEI, "$_") || die "Kann Datei nicht oeffnen $!";21       @dummy = ;22       close (DATEI);23       my $l = @dummy;24       print "Länge ist : ".(-s "$_")."\n";   25       if ($l > $zeile)26       {27       my @dummy2;28       print " Zeilen:$l - Datei:$_ \n";29       my $mx =$l-1;30       my $myz = $l-$zeile;31       for ($myz;$mx>=$myz;$myz++)32          {   33          push(@dummy2, $dummy[$myz]);34          }35       open (DATEI, ">$_") || die "Kann Datei nicht oeffnen $!";36       print DATEI @dummy2;37       close (DATEI);38       }39    }40 }

Es tut zwar, aber irgendwie glaub ich, das es ziemlicher Muell ist und auch viel einfacher und sauberer geht.
Das Script läuft auf Solaris, d.h. zur Not könnt ich auch Unix-Befehle einbauen. Den Befehl dafür hab ich auch
tail -ZEILE DATEI > DATEI un der klappt auch aber nicht im Perl-Scriipt.
Versucht hab ich
system ("tail -$zeile $_ > $_");
aber irgendwie will mein Perl das nicht und gibt ne Fehlermeldung aus (die ich grad nicht mehr weiss).

Vielleicht kann mir jemand sowohl mit dem Unix-Befehl als auch plattformunabhängig, also nur mit Perl weiterhelfen.

thx
alligator