for my $i ( 0 .. $natms{$f1}-1 ) { my $xyz = @{$coord{$f1}[$i]}; my $rad = pop @xyz; for my $j ( 0 .. $natms{$f2}-1 ) { # use map to compute the x,y,z diffs just once each: my @difs = map { $xyz[$_] - $coord{$f2}[$j][$_] } ( 0, 1, 2 ); my $dist = sqrt( $difs[0] * $difs[0] + $difs[1] * $difs[1] + $difs[2] * $difs[2] ); my $rsum = $rad + $coord{$f2}[$j][3]; if ( $dist < $rsum ) { print TXT "Overlap for $atmnb{$f1}[$i] and $atmnb{$f2}[$j]\n"; } else { print PDB $input{$f1}[$i]; } } }