use strict; use Text::ParseWords; while() { my @Proto = ; my $Header = shift @Proto; my @Assembly; my $Nr = &parsingHeader($Header, "Number"); my $Nr_1 = &parsingHeader($Header, "Number_1"); my $name = &parsingHeader($Header, "Name"); foreach(@Proto) { my @fields = quotewords( ';', 0, $_); $fields[$Nr] =~tr/0123456789/9876543210/ if defined $Nr; $fields[$Nr_1] =~tr/0123456789/9876543210/ if defined $Nr_1; $fields[$name] =~tr/A-Za-z/B-Wzb-w/ if defined $name; push @Assembly, join(";",@fields); } unshift @Assembly, $Header; print @Assembly; } sub parsingHeader { my $x; my $Row = shift @_; my $Column = shift @_; my @parts = split(/;/, $Row); for(my $i = 0; $i <= @parts; $i++) { if($parts[$i] eq $Column) { $x = $i; last; }; } return $x; } __DATA__ Number;Name;Age;Gender;Number_1;Dummy 123;Andrew;54;m;123;AAA 234;John;43;m;234;JJJ 345;Helen;23;w;345;HHH