in reply to Element Count from Array to HoH

I believe part of the problem is that you only want to iterate through each distinct item once within that outer for loop. There are only three distinct items: TAGT, TTTT, and TTAT, yet the loop will iterate 5 times thus giving you incorrect results. Something like next if exists $transaction_map_ref->{$item}; inserted just before the second for loop ought to solve that problem.

Secondly, $$transaction_map_ref{$item}{$tid}++; increments the transaction id of the outer loop item as opposed to the inner loop item, which is what we care about. That needs to be changed to $transaction_map_ref->{$item}{$tid2}++; instead.

Lastly, ditch last.

Also, I just happened to be reading about using the variable names $a and $b before I read this post. You ought to rename those variables within your hd routine, just for good measure. (see (re:x5 use strict....)$a and $b should be in perlvar)