@DISKD = ; foreach $domain (@domainlist) { @value = grep { /^\Q$domain\E\b/ } @DISKD; for $value (@value) { @data = split /\s+/, $value; $sum += $data[$#data]; } } #### # Calculate the sum for every domain. @DISKD = ; foreach (@DISKD) { @data = split(/\s+/, $_); $sum{$data[0]} += $data[1]; } # Filter out the domains we don't want. # We can even skip this step if we don't care # if %sum has more domains than @domainlist. %domainlist = map { $_ => 1 } @domainlist; foreach $domain (keys(%sum)) { delete $sum{$domain} unless $domainlist{$domain}; }