10 my ($ingr, $al) = /\A([^\(]+) \(contains (.*)\)\z/;
11 my %ingr = map { $_ => 1 } split /\s+/, $ingr;
12 my @al = split /, /, $al;
14 if (defined $allergens{$al}) {
15 for my $in1 (keys %{ $allergens{$al} }) {
17 delete $allergens{$al}->{$in1};
21 $allergens{$al} = { %ingr };
27 for my $al (keys %allergens) {
28 if (keys %{ $allergens{$al} } == 1) {
30 for my $in (keys %{ $allergens{$al} }) {
34 delete $allergens{$al};
35 for my $al1 (keys %allergens) {
36 delete $allergens{$al1}->{$in1};
42 print join(',', sort { $is_al{$a} cmp $is_al{$b} } keys %is_al), "\n";