CSCI 4230
Software Tools
Spring 2000
Suugested Solution to Homework #3

(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;
}