use List::Util qw( sum); my (@emp_lst, %prod); while ( ) { my ( $emp) = m{(\d+)} or warn "No in line $.\n", next; push @emp_lst, $emp unless $prod{ $emp}; $prod{ $emp} ||= []; my ( $prod) = m{([.\d]+)} or next; push @{ $prod{ $emp} }, $prod; } for ( values %prod ) { $_ = @$_ ? sum( @$_)/@$_ : ''; } print "$_ - $prod{ $_}\n" for @emp_lst;