[Dresden-pm] Datei Lesen plus schreiben

Richard Möhn richard.moehn at gmx.de
So Mai 6 05:46:02 PDT 2012


On Sun, May 06, 2012 at 02:09:36PM +0200, Sebastian Oeste wrote:

> Ich wollte ein Perl Skript schreiben mit dem ich eine bestimmte Zeile aus
> einer Datei löschen kann. 
> 
> #! /usr/bin/perl -w
> 
> use strict;
> use warnings;
> use feature "say";
> 
> my ($fh, $i);
> open ($fh, "+>", "test.txt") || die qq/cannot open $!/;
> my @lines = ();
> $i = 0;
> while ( <$fh> ) 
> {
>     push (@lines, $_) unless $i == 2;
>     $i ++;
> }
> 
> for (@lines) 
> {
>     print $fh "$_\n" ;
> }
> 
> close ($fh); 
> 
> leider funktioniert es nicht mit "+>" die Datei zum lesen und schreiben zu
> öffnen. Damit das Skript funktioniert muss ich die Datei erst zum lesen
> öffnen, nach dem einlesen wieder schließen und dann zum schreiben öffnen.
> 
> Warum funktioniert das nicht ? 
> Habt ihr ein Tip für mich wie das noch eleganter geht ? 


Tipps zur Eleganz:
- Die eingebaute Variable $. ($INPUT_LINE_NUMBER mit use English)
  enthält die aktuelle Zeilennummer für das aktuelle Filehandle.
- Bei großen Dateien ist es problematisch, alles in den Speicher (Array)
  zu lesen. Daher:
- Entweder Inplace-Bearbeitung mit $^I oder -i.
- Oder Tie::File. Damit kann man auf die Datei wie auf ein Array
  zugreifen, ohne dass sie in den Speicher geladen wird.


Beste Grüße

Richard



Mehr Informationen über die Mailingliste Dresden-pm