#!/usr/bin/perl use strict; use warnings; my %params; open PARAM, "param.dat" or die $!; my $buffer = ''; my $commentbuffer = ''; while () {    # Kommentare extrahieren    if (s/\s*#\s*(.*?)\s*(\\?\n)/$2/) {        my $ctemp = $1;        if (length $ctemp) {            if (length $commentbuffer) {                $commentbuffer .= "\n" . $ctemp;            } else {                $commentbuffer = $ctemp;            }        }    }    # Leerzeichen an Anfang und Ende loeschen    s/^\s+//;    s/\s+$//;    # Zeile jetzt leer?    unless (length) {        # vorhandenen Buffer bearbeiten        insert_keys (\$buffer, \$commentbuffer, \%params);        next;    }    # Zeile merken    $buffer .= $_;    if ($buffer =~ /\\$/) {    # Fortsetzung folgt?        # Fortsetzungszeichen durch Leerzeichen ersetzen        chop $buffer; $buffer .= " ";        next;    }    insert_keys (\$buffer, \$commentbuffer, \%params); } # Falls die letzte Zeile noch ein Fortsetzungszeichen hatte ... insert_keys (\$buffer, \$commentbuffer, \%params); use Data::Dumper; print Dumper \%params; ############################################# sub insert_keys {    my ($bufferp, $cbufferp, $paramp) = @_;    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}{wert} = \@vals;    } else {        $paramp->{$key}{wert} = $val;    }    $paramp->{$key}{comment} = $$cbufferp;    $$cbufferp = "";    $$bufferp = ""; } #############################################