1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
#!/usr/bin/perl use strict; use warnings; my @rules = ( [ {Wert2 => 20}, {Wert2 => 25}, {Wert4 => 4097} ] , [ {Wert1 => 10}, {Wert1 => 13}, {Wert4 => 4099} ] ); while (my $row = <DATA>) { chomp $row; my %values = split /[= ]/, $row; for my $rule (@rules) { my ($alt, $neu, $bed) = @{$rule}; my $alt_key = (keys %{$alt})[0]; my $neu_key = (keys %{$neu})[0]; my $bed_key = (keys %{$bed})[0]; # $alt ist faktisch entweder auch eine Bedingung oder verzichtbar! if ($values{$alt_key} eq $alt->{$alt_key} and $values{$bed_key} eq $bed->{$bed_key}) { $values{$neu_key} = $neu->{$neu_key}; } } for my $key (sort keys %values) { print "$key=$values{$key} "; } print "\n"; } __DATA__ Wert1=10 Wert2=20 Wert3=30 Wert4=4096 Wert5=50 Wert6=60 Wert7=70 Wert8=80 Wert9=90 Wert1=10 Wert2=20 Wert3=30 Wert4=4097 Wert5=50 Wert6=60 Wert7=70 Wert8=80 Wert9=90 Wert1=10 Wert2=20 Wert3=30 Wert4=4098 Wert5=50 Wert6=60 Wert7=70 Wert8=80 Wert9=90 Wert1=10 Wert2=20 Wert3=30 Wert4=4099 Wert5=50 Wert6=60 Wert7=70 Wert8=80 Wert9=90 Wert1=10 Wert2=20 Wert3=30 Wert4=4090 Wert5=50 Wert6=60 Wert7=70 Wert8=80 Wert9=90
1
2
3
4
5
Wert1=10 Wert2=20 Wert3=30 Wert4=4096 Wert5=50 Wert6=60 Wert7=70 Wert8=80 Wert9=90
Wert1=10 Wert2=25 Wert3=30 Wert4=4097 Wert5=50 Wert6=60 Wert7=70 Wert8=80 Wert9=90
Wert1=10 Wert2=20 Wert3=30 Wert4=4098 Wert5=50 Wert6=60 Wert7=70 Wert8=80 Wert9=90
Wert1=13 Wert2=20 Wert3=30 Wert4=4099 Wert5=50 Wert6=60 Wert7=70 Wert8=80 Wert9=90
Wert1=10 Wert2=20 Wert3=30 Wert4=4090 Wert5=50 Wert6=60 Wert7=70 Wert8=80 Wert9=90
2014-05-03T07:49:19 MarkusHIm Moment habe ich noch etwas Verständnisschwierigkeiten mit der Schleife in Zeile 17.
2014-05-03T07:49:19 MarkusHIst die Bedingung in Zeile 26 nicht immer erfüllt?
$line =~ s/\bWert2=20\b/Wert2=25/ if $line =~ /\bWert4=4097\b/;