my @val = split(" ",$val);
my $v = join (":", @val);
####
my $v = join ':', split ' ', $val;
####
if (exists $hash{$key}) {
$hash{$key} .= $sep.$v;
}
else {
$hash{$key} = $v;
}
####
$hash{$key} = exists $hash{$key} ? $hash{$key} . $sep . $v : $v;
####
$hash{$key} = exists $hash{$key} ? "$hash{$key}$sep$v" : $v;
####
#!/usr/bin/env perl -l
use strict;
use warnings;
my %data;
my $re = qr{^(\w+\s+\w+)\s+(\w+)\s+(\w+)};
while () {
my ($key, $val) = map { $_->[0], join ':', @$_[1,2] } [/$re/];
push @{$data{$key}}, $val;
}
print "$_ ", join ', ', @{$data{$_}} for sort keys %data;
__DATA__
id1 name1 cat1 catname1
id1 name1 cat2 catname2
id2 name2 cat3 catname3
id3 name3 cat1 catname1
id3 name3 cat4 catname4
####
id1 name1 cat1:catname1, cat2:catname2
id2 name2 cat3:catname3
id3 name3 cat1:catname1, cat4:catname4