迪拉斯: Textteile ersetzen

Beitrag lesen

Hey,

Ich lese zuerst ein Text File ein:
my @FILE = cat file;

mit einem Systemaufruf? Das ist schlechter Stil, weil vermeidbar. Zur Portabilität liest du die Datei besser mit Bordmitteln ein, und du bist auch gleich flexibler bei dem nächsten Teilproblem.

  
my @file1;  
{  
    open my $fh, '<', 'file1' or die "could not open file1 for reading: $!";  
    my @file1 = (<>);  # <>-Operator im Listenkontext -> slurp die ganze Datei  
    close $fh;  
};  

In dem File befindet sich ein TAG "#REPLACE"
Alles was hinter dem FLAG steht soll gelöscht werden

Das kann man auch anders auffassen: wenn wir diese Zeile erreichen, hören wir auf, die Datei zu lesen. Ersetze also das unbedingte Einlesen durch eine bedingte Schleife.

  
    while (<>) {  
        push @file1, $_;      # aktuelle Zeile anhängen  
        last if /^#REPLACE/;  # wenn aktuelle Zeile damit beginnt, Schleife beenden  
    };  

und gegen den Inhalt eines weiteren Files (file2)ersetzt werden.

Lies die zweite Datei in ein Array, dann hänge es an das zuerst zubereitete an. Wie die beiden Teilschritte auszusehen haben, weißt du jetzt schon.

Hinweis 1: Der ganze Code ist ungetestet.

Hinweis 2: Mit noch weniger Code geht das ganze Problem mit Tie::File zu lösen, wo du Dateien mit Arrayfunktionen behandeln kannst. http://perldoc.perl.org/Tie/File.html

--
水-金-地-火-木-土-天-海-冥