#!/usr/bin/env perl
use strict;
use warnings;
use feature qw(say);
my %groups;
while ( my $line = readline *STDIN ) {
chomp $line;
if ( $line =~ m/\((?<user>[^)]+)\) groups=(?<groups>.+)/ ) {
for my $groupname ( split ',', $+{groups} ) {
push @{ $groups{$groupname} }, $+{user};
}
} else {
warn "NOTICE non-matching line $. - '$line'\n";
}
}
for my $groupname ( sort keys %groups ) {
say $groupname, ' ', join ',', @{ $groups{$groupname} };
}
Эта версия использует хэш (группы) ссылок на массив (пользователи) и предупреждает, если он не может соответствовать строке ввода (ваши данные повреждены? Как бы ты знаешь?).