sub join_ids { return = $_[0] < $_[1] ? "$_[0];$_[1]" : "$_[1];$_[0]"; } #### # assume my %obs for holding data; my $zerozero = pack("LL",0,0); for (my $i=0; $i<=$#current_user_ids; $i++) { for (my $j=$i; $j<=$#current_user_ids; $j++) { my $key = join_ids( $i, $j ); my ($seen, $voted) = unpack( "LL", $obs{ $key } || $zerozero ); $seen++; if ($current_votes[$i]==1 && $current_votes[$j]==1) { $voted++; } $obj{$key} = pack( "LL", $seen, $voted ); } }