(1) For example, a lousy one:
sub extract {
my @records = split /;/, shift;
my %result = ();
foreach (@records) {
my @data
= split /,/;
my $key
= shift @data;
$result{$key}
= [];
foreach
(@data) {
push (@{$result{$key}}, $_);
}
}
%result;
}
Alternatively, by using the map function.
sub extract {
my @records = split /;/, shift;
my @rest;
map {@rest = split /,/; (shift
@rest, [@rest])} @records;
}
Or, simply:
sub extract {
map { my @rest = split /,/;
(shift @rest, [@rest])} split /;/, shift;
}
(2) For example,
sub collapse {
my %data = %{$_[0]};
join ";", map { join ",", ($_,
@{$data{$_}})} sort keys %data;
}