I can't get your results. In my hands, I get the distinct values, as expected, also with that little chunk of perl code of yours. If I remove the 'DISTINCT' I get the doubles (I made a 4 row table).
So you must be overlooking some detail. Maybe you can write up a small but complete) code example (including data) with data (!) that can be run against a postgres database (remove/change the user/password, of course). I expect that while you prepare that, you will see what went wrong.
(by the way:
the Pg don't-do-this page advises against this data type
edit: I was mistaken; I probably futzed my own try-out code, but I see you got good answers already so I'll leave it at that.