#!/usr/bin/perl ### Notwendige Module laden use strict; # überprüfe programm vor ablauf strikt auf Fehler use warnings; # und gib auch Fehler aus use utf8; # erlaube UTF-Zeichen in Quelltext ### Modul für das Erfassen der Kommandozeilenparameter deklarieren use Getopt::Long; ### Variablen deklarieren my $name; my $prename; my $filename; ### Ersatzstring aus 50mal Zeichen '-' definieren my $c50 = '-' x 50; ### Unterprogramm für Hilfetext definieren sub help { print < \$prename, # Parameter Vorname als String 'name|n=s' => \$name, # Parameter Name als String 'datei|f=s' => \$filename # Parameter Dateiname der einzulesenden Datei als String ); ### Parameter einlesen GetOptions(%opts); ### Vorhandensein der Parameter prüfen if ( not defined($name) and not defined($prename) ) { help(); # bei fehlenden Parametern Hilfe anzeigen } ### Eingabedatei öffnen my $in_fh; open $in_fh, '<', $filename # im Lesemodus öffnen or die "Datei '$filename' kann nicht geöffnet werden: $!" ; # bei Fehlschlag Fehler ausgeben ### Ausgabedatei öffnen my $out_fh; my $out_filename = "$filename.tmp"; # temporärer Dateiname open $out_fh, '>', $out_filename # im Schreibmodus öffnen or die "Datei '$out_filename' kann nicht erzeugt werden: $!" ; # bei Fehlschlag Fehler ausgeben flock $out_fh, 0; # Datei gegen mehrfachen Zugriff sperren ### Eingabedatei einlesen while ( my $line = <$in_fh> ) { # Zeilenweise in Variable $line einlesen if (length $name # falls Parameter $name vorhanden and $line =~ /#\Q$name\E\s*Name#/ ) # und $name mit möglichen nachfolgenden Leerzeichen in $line vorhanden { $line =~ s/#\Q$name\E\s*Name/#${c50}Name/ ; # ersetze das Vorkommen durch den Ersatzstring } if (length $prename # falls Parameter $prename vorhanden and $line =~ /#\Q$prename\E\s*Vorname#/ ) # und $prename mit möglichen nachfolgenden Leerzeichen in $line vorhanden { $line =~ s/#\Q$prename\E\s*Vorname/#${c50}Vorname/; # ersetze das Vorkommen durch den Ersatzstring } print $out_fh $line; # speichere neue Zeile in Ausgabedatei } ### Eingabedatei schließen close $in_fh or die "Datei '$filename' kann nicht geschlossen werden: $!"; # bei Fehlschlag Programmabbruch mit Fehlermeldung ### Ausgabedatei schließen close $out_fh or die "Datei '$out_filename' kann nicht geschlossen werden: $!"; # oder bei Fehlschlag Programmabbruch mit Fehlermeldung # alte Eingabedatei löschen unlink $filename or die "Datei '$filename' kann nicht gelöscht werden!"; # Ausgabedatei in Dateinamen der Eingabedatei umbenennen rename ($out_filename, $filename) # umbenennen or die "Datei '$out_filename' kann nicht in '$filename' umbenannt werden!"; # oder Programmabbruch mit Fehlermeldung 1;