use strict; use warnings; my $key; my %data; while () { chomp($_); my @data = split(/\s+/, $_); if ($data[0] =~ /^\%(.+)/) { $key = $1; shift(@data); } push(@{$data{$key}}, @data); } foreach my $key (keys %data) { print "$key: ", join(", ", @{$data{$key}}), "\n"; } __DATA__ %key1 data1 data2 %key2 data3 data4 data5 %key3 data6 data7 data8 data9