You can't print the total number of occurrences alongside the individual items because you don't know that at the time you print, which is when you see the first of them. However, you could print totals as a summary after you have processed all the records because the %seen hash keeps count for you. Alternatively, defer printing until all records have been read, storing what you want to print as you go in an array (or hash if order is unimportant) that you can tack totals onto at the end of processing.