my @accounts = ( "A x1 B y1 C z1 D v1 E w1 F", "A x2 B y2 C zzz2 D v2 E w2 F", "A x3 B y3 C z3 D v3 E w3 F", "A x4 B y4 C z4 D v4 E wwww4 F", "A x5 B y5 C z5 D v5 E w5 F", "A x6 B y6 C z6 D v6 E F", ); # Transform @accounts in place for (@accounts) { tr/ //d; # get rid of those confusing spaces my @acct = split /([A-F])/; # use the tags shift @acct; # get rid of the undef pre-A entry... pop @acct; # ... and the 'F' my %stuff = (@acct); # hash what's left $_ = [@stuff{'A'..'E'}]; # keep ordered values } { local $" = "\t"; print "|@$_|", $/ for @accounts; } __END__ |x1 y1 z1 v1 w1| |x2 y2 zzz2 v2 w2| |x3 y3 z3 v3 w3| |x4 y4 z4 v4 wwww4| |x5 y5 z5 v5 w5| |x6 y6 z6 v6 |