print Dumper \@list;
$var = (
[ 1,2,3 ],
[ 4,5,6 ],
[ 1,2,3 ],
[ 4,5,6 ],
[ 1,2,3 ],
);
From which List::MoreUtils::uniq will render
use List::MoreUtils qw[ uniq ];;
print for uniq @list;;
ARRAY(0x194ac18)
ARRAY(0x194ac54)
ARRAY(0x194ac90)
ARRAY(0x194accc)
ARRAY(0x194ad08)
But the required result might be:
ARRAY(0x194ac18)
ARRAY(0x194ac54)
With the "naive" solution, any attempt to use the stringified reference (or other stringifed value) in the place of that value, is going to throw up an error immediately. Thereby warning you that either the nature of your data has changed and your solution is no longer good enough, or there is an up-stream error that is giving you bad data. With the module solution, you aren't going to get that error until some point later when it will be much harder to trace back to source.
For simple scalar values, the "naive" solution works fine. And once you start adding non-simple values-- like references--into the mix, it is naive to believe that judging different references to structures containing identical values as distinct, will always be correct. Or even that it would be correct in a preponderance of cases.
For every scenario where the modules result would be more correct, there is another where it would be more wrong.
The point is: you have to know your data, and tailor your solution to that data and the required semantics.
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
|