Ich hab den obigen Code einmal etwas erweitert um die Ausgabe in eine HTML-Tabelle zu machen in der jede Gruppe mit den dazugehörigen Namen in einer Zeile ausgegeben wird.
#!/usr/bin/perl use strict;
use warnings;
my %groups;
my $max_names_in_group = 0; # max. Anzahl von Namen in einer Gruppe
while(my $line = <DATA>) {
chomp($line);
next if $line =~ /^\s*$/;
my($group, @names) = split '\|', $line;
# speichert die max. Anzahl von Namen in einer Gruppe
$max_names_in_group = @names
if $max_names_in_group < @names;
# neues Gruppenarray falls noch keins vorhanden ist
my $tmp = ($groups{$group} ||= []);
# Namen ins Gruppenarray pushen
push(@{$tmp}, @names);
}
print qq{<html>\n<body>\n<table border="1">\n};
print "<tr>\n";
print "<th>Gruppen</th>\n";
print qq{<th colspan="$max_names_in_group">Namen in Gruppe</th>\n};
print "</tr>\n";
foreach my $group (keys %groups) {
print "<tr>\n";
print "<td>$group</td>\n";
foreach my $name (@{ $groups{$group} }) {
print "<td>$name</td>\n";
}
my $colspan = ($max_names_in_group - @{$groups{$group}});
print qq{<td colspan="$colspan"> </td>\n}
if $colspan;
print "</tr>\n";
}
print "</table>\n</body>\n</html>\n";
__END__
GruppeA|name
GruppeA|name1
GruppeB|name3|name2
GruppeC|name3
GruppeD|name1|name2|name3