while () { my ($u, $superclass,$rel,$v) = (split)[0,1,2,3]; my $conteggio=&calcolo($u,$v); print OUT "$u"."\t".$rel."\t".$v."\t".$conteggio."\n"; } #### my $cur_superclass; my @records; while () { my ($u, $superclass,$rel,$v) = (split)[0,1,2,3]; $cur_superclass = $superclass if !defined($cur_superclass); if ($cur_superlclass ne $superclass) { my $conteggio=calcolo(\@records); print OUT "$u"."\t".$rel."\t".$v."\t".$conteggio."\n"; @records = (); } push @records, [ $u, $superclass, $rel, $v ]; $cur_superclass = $superclass; } #### sub calcolo { my $rRecs = shift; # Number of records my $found_recs = @{$rRecs}; for my $rRec (@$rRecs) { # compute partial values my ($u, $superclass, $rel, $v) = @$rRec; .... } # combine partials return $partials / $found_recs; # or some such... }