my %mapping; while (<>) { my ($key, $value) = /^(.*?)=(.*)$/ or die "Cannot parse $_"; push @{$mapping{$key}}, split /, /, $value; } for my $word (sort keys %mapping) { my @aliases = sort @{$mapping{$word}}; print "$word=", join(", ", @aliases), "\n"; }