#!/usr/bin/perl use strict; use warnings; my %params; open PARAM, "/homes/Patrick/Perl/Tk/Project2.bak" or die $!; my $buffer = ''; while () { # Kommantar rausholen   my (@splitter1);   @splitter1 = split(/#/ , $_); # Kommentare loeschen   s/\s*#.*?(\\?\n)/$1/; # Leerzeichen an Anfang und Ende loeschen   s/^\s+//;   s/\s+$//; # Zeile jetzt leer?   unless (length)   {     # vorhandenen Buffer bearbeiten       insert_keys (\$buffer, \%params);       next;   } # Zeile merken   $buffer .= $_;   if ($buffer =~ /\\$/)   # Fortsetzung folgt?   { # Fortsetzungszeichen durch Leerzeichen ersetzen       chop $buffer; $buffer .= " ";       next;   } # Ein Satz zusammen => eintragen   insert_keys (\$buffer, \%params, @splitter1[1]); } # Falls die letzte Zeile noch ein Fortsetzungszeichen hatte ... insert_keys (\$buffer, \%params); use Data::Dumper; print Dumper \%params; ############################################# sub insert_keys { # An dieser Stelle müsste noch die Kommantare mit eingetragen werden   my ($bufferp, $paramp, $komment) = @_;  # Kommentare müssen mit   return unless defined $$bufferp && length $$bufferp;   die "Syntaxfehler in Zeile $." unless index ($$bufferp, '=') >= 0;   my ($key, $val) = split /\s*=\s*/, $$bufferp, 2;   unless (defined $val)   {       $paramp->{$key} = undef;       return;   }   if ($val =~ /\s/)   # Leerzeichen zwischen Woertern? => Liste   {       my @vals = split " ", $val;       $paramp->{$key} = \@vals;   }   else   {       $paramp->{$key} = $val;   }   $$bufferp = ""; } ##########################################