#!/usr/bin/perl use strict; use warnings; my @rules = ( [ {Wert2 => 20}, {Wert2 => 25}, {Wert4 => 4097} ] , [ {Wert1 => 10}, {Wert1 => 13}, {Wert4 => 4099} ] ); while (my $row = ) { 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