I'm writing a sub that take as input, references to a 2d array and a hash-of-
arrays.  The 2d array never changes but I operate on and return an updated 
hash-of-arrays.

My issue is that I can get the sub working fine, iterating though the 2d array 
correctly until I put a return statement in.  Once I put the return statement 
in, the sub only reads one slice of the 2d array, thus not returning a 
correctly updated array... why??? am I missing something, surely it should 
carry on operating on the whole array.

Simplified code example below.  Works fine, printing results, unitl you 
uncomment the "#return($pointer);" line:

#!/usr/bin/perl
@matrix=(["B1","1.00","0.80","0.33","0.34","0.03","0.05","0.01"],
         ["B2","0.80","1.00","0.29","0.31","0.01","0.03","0.01"],
         ["B3","0.33","0.29","1.00","0.73","0.41","0.28","0.31"],
         ["B4","0.34","0.31","0.73","1.00","0.33","0.22","0.24"],
         ["B5","0.03","0.01","0.41","0.33","1.00","0.43","0.46"],
         ["B6","0.05","0.03","0.28","0.22","0.43","1.00","0.47"],
         ["B7","0.01","0.30","0.24","0.46","0.47","0.47","1.00"],
);
%ctrs=( 2 => [],
        4 => [],
);
[EMAIL PROTECTED];
[EMAIL PROTECTED];
$p2_ctrs=\%ctrs;

$duff=columns_to_clusters($p2_matrix,$p2_ctrs);
print "$duff\n";

sub columns_to_clusters
{
 my $tmp_matrix=shift;
 my $tmp_ctrs=shift;
 my @[EMAIL PROTECTED];
 my %tmp_ctrs=%{$tmp_ctrs};
 # iterate through columns in matrix
 for my $col (1 .. $#tmp_matrix) {
        my $tmp_dist=999;
        my $tmp_ctr='null';
        # iterate through ctrs
        foreach my $kno (keys %tmp_ctrs) {
                print "col $col, ctr $kno => dist $tmp_matrix[$kno][$col]\n";
                if ((defined $tmp_dist) && ($tmp_matrix[$kno][$col]
<$tmp_dist)) {
                        $tmp_dist=$tmp_matrix[$kno][$col];
                        $tmp_ctr=$kno;
                } elsif (!defined $tmp_dist) {
                        $tmp_dist=$tmp_matrix[$kno][$col];
                        $tmp_ctr=$kno;
                }
        }
        print "For col #$col => closest ctr is $tmp_ctr at dist $tmp_dist\n";
        my @tmp=$tmp_ctrs{$tmp_ctr};
        unshift(@tmp,"$col");
        [EMAIL PROTECTED];
        $pointer=\%tmp_ctrs;
        #return($pointer);
 }
}

1;



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to