%person = ( firstname => ['name2', 'name1', 'name3'], lastname => ['lname2', 'lname1', 'lname3'], city => ['city2','city1','city3'] ); for (map {$_->[1] } sort {$a->[0] cmp $b->[0] } map { [$person{firstname}[$_], $_] } (0 .. scalar @{$person{firstname}} - 1)) { printf("%s %s %s\n", $person{firstname}[$_], $person{lastname}[$_], $person{city}[$_]); }