sub nneighbours { die "Bad Input Matrix: must be even" if @_ % 2; my @mat = @_; my $sum = 0; my $limit = $#mat; for(my $i = 0; $i < $limit; $i += 2){ my $nearest; for(my $j = 0; $j < $limit; $j += 2){ next if $i == $j; my $dist = sqrt(($mat[$i] - $mat[$j]) ** 2 + ($mat[$i+1] - $mat[$j+1]) ** 2); $nearest = defined $nearest? ($nearest > $dist ? $dist : $nearest) : $dist; } $sum += $nearest; } return $sum; }