use strict; use warnings; my %hash = map { (split /:/, $_ )[0] => (split /:/, $_ )[2] } ; print join ( "\n", sort keys %hash ) . "\n"; __DATA__ k1:asd:v1 k2:asd:v2 #### map { my @tmp = split /:/, $_; $tmp[0] => $tmp[2]; }