As to the issue of poor performance due to psuedohash overhead, that just isn't a factor in my thinking. Because the lists of things to be processed by this code will seldom exceed, say, 20 or so, it simply doesn't seem worthwhile to get worked up over the performance aspect. Convenience and these other preferences I've listed weigh in far more for me.
If that's the case, then why not just use the (much simpler, and easier to read) solution from this reply to the orriginal thread...
my %seen =() ;
@unique_array = grep { ! $seen{$_}++ } @non_unique_array ;
Or, to make a one liner like yours...
perl -e '@a = $ARGV[0]? @ARGV : (<STDIN>); chomp @a; print join "\n",
+ grep { ! $s{$_}++ } @a;' $*