use strict; use warnings; my %mapping = ( 9999 => 3, 8888 => 4, 7777 => -1, ); { local $/ = "GASSE\n"; while ( my $item = ) { my %data; my ($steuer,$hans,$dampf) = $item =~ m{ HANS (\d{4}) (\d+) \s* DAMPF 0000 (\d+) }xms; my $length = $mapping{$steuer}; if ( $length > 0 ) { $hans = substr $hans, 0, $length; print sprintf "ZUSATZ_FORMAT_A %s ZUSATZ_FORMAT_B %s ZUSATZ_FORMAT_C\n", $hans, $dampf } elsif ( $length < 0 ) { print "Fehler, bitte manuell prüfen.\n"; } else { print "Format unbekannt\n"; } } } __DATA__ HANS9999123456789 DAMPF0000123456789 GASSE HANS8888123456789 DAMPF0000123456789 GASSE HANS7777123456789 DAMPF0000123456789 GASSE