in reply to Subroutine not correct (I think)

You are computing every distance twice. It probably is better to keep your results in an array and take advantage of symmetry.
use strict; use warnings; use Data::Dumper; my @data; while (<DATA>) { next if !/\S/; push @data, [split]; } my @array; for my $i (0..$#data) { $array[$i][$i] = 0; for my $j ($i+1..$#data) { $array[$j][$i] = $array[$i][$j] = distance( $data[$i], $data[$ +j] ); } } print Dumper( \@array ); sub distance { my ($p1, $p2) = @_; return sqrt ( ($p1->[0] - $p2->[0]) ** 2 + ($p1->[1] - $p2->[1]) ** 2 + ($p1->[2] - $p2->[2]) ** 2 ); } __DATA__ 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
Bill