%comboHashRef = { record_entry <= [0,store variable 1,store variable 2, ... product ] record_entry <= [0,product variable1 ,product variable2 , ... product ] record_entry <= [1,product variable1 ,product variable2 , ... product ] ... } #### sub uniqify { my $outoutfile = $_[0]; # index of where product is stored in array (can vary) my $pid = $_[1]; my %comboHashRef = %{$_[2]}; my %precords; my @dedup_purchase=(); my @dedup_notpurchase=(); my $product_key; ## loop through hash foreach my $key (keys %comboHashRef){ ## if purchased if ($comboHashRef{$key}->[0] == '1'){ ## create key based on store identifiables my $product_key = $comboHashRef{$key}->[1]."_".$comboHashRef{$key}->[2]."0"; ## if produce key exists if ($product_key ~~ @dedup_purchase) { ## if product already seen if ($comboHashRef{$key}->[$pid] ~~ $precords{$product_key}{"dedup"}){ $precords{$product_key}{"dup_count"}++; $precords{$product_key}{"total_count"}++; next; ## if product not already seen }else{ push(@{$precords{$product_key}{"dedup"}}, $comboHashRef{$key}->[$pid]); $precords{$product_key}{"dedup_count"}++; $precords{$product_key}{"total_count"}++; print $outfile $key ."\t" , (join("\t", @$_), "\n") for $comboHashRef{$key}; next; } ## if product does not exists }else { push(@dedup_purchase, $product_key); ## create hash for tracking product push(@{$precords{$product_key}{"dedup"}}, $comboHashRef{$key}->[$pid]); $precords{$product_key}{"dedup_count"}++; $precords{$product_key}{"total_count"}++; print $outfile $key ."\t" , (join("\t", @$_), "\n") for $comboHashRef{$key}; next; } ## if not purchased }if ($comboHashRef{$key}->[0] == '0'){ ## create key based on store identifiables my $product_key = $comboHashRef{$key}->[1]."_".$comboHashRef{$key}->[2].'_-'; ## if key exists if ($product_key ~~ @dedup_notpurchase) { ## if product key aleady seen if ($comboHashRef{$key}->[$pid] ~~ $precords{$product_key}{"dedup"}){ $precords{$product_key}{"dup_count"}++; $precords{$product_key}{"total_count"}++; next; }else{ ## append to hash for tracking product push(@{$precords{$product_key}{"dedup"}}, $comboHashRef{$key}->[$pid]); $precords{$product_key}{"dedup_count"}++; $precords{$product_key}{"total_count"}++; print $outfile $key ."\t" , (join("\t", @$_), "\n") for $comboHashRef{$key}; next; } ## if product does not exists }else{ push(@dedup_notpurchase, $product_key); ## create hash for tracking product push(@{$precords{$product_key}{"dedup"}}, $comboHashRef{$key}->[$pid]); $precords{$product_key}{"dedup_count"}++; $precords{$product_key}{"total_count"}++; print $outfile $key ."\t" , (join("\t", @$_), "\n") for $comboHashRef{$key}; next; } } } return %precords; }