$ perl -Mstrict -Mwarnings -E '
my (%x, %y) = (a => 1, b => 2, c => 3, d => 1, e => 2, f => 1);
push @{$y{$x{$_}}}, $_ for keys %x;
say "$_: ", join ", ", @{$y{$_}} for keys %y;
'
1: a, d, f
2: b, e
3: c
####
$ perl -Mstrict -Mwarnings -E '
my (%x, %y) = (a => 1, b => 2, c => 3, d => 1, e => 2, f => 1);
push @{$y{$x{$_}}}, $_ for keys %x;
say "$_: ", join ", ", @{$y{$_}} for keys %y;
'
2: e, b
1: d, a, f
3: c
####
$ perl -Mstrict -Mwarnings -E '
my (%x, %y) = (a => 1, b => 2, c => 3, d => 1, e => 2, f => 1);
push @{$y{$x{$_}}}, $_ for keys %x;
say "$_: ", join ", ", @{$y{$_}} for keys %y;
'
3: c
1: f, d, a
2: b, e
####
$ perl -Mstrict -Mwarnings -E '
my %orig = (a => 1, b => 2, c => 3, d => 1, e => 2, f => 1);
my %temp;
push @{$temp{$orig{$_}}}, $_ for keys %orig;
say "$_: ", join ", ", @{$temp{$_}} for keys %temp;
'
1: a, d, f
3: c
2: b, e