In mktables, disable string overloading when de-duping lists.
authorNicholas Clark <nick@ccl4.org>
Thu, 26 Aug 2010 19:57:00 +0000 (21:57 +0200)
committerNicholas Clark <nick@ccl4.org>
Thu, 26 Aug 2010 20:00:44 +0000 (22:00 +0200)
As the unique() function is called with either a list of strings or a list of
objects, and all objects stringify to distinct values, there is no behaviour
difference between using object stringification and object address for a
"seen" hash. There is, however, an 8% run time difference :-)

Devel::NYTProf strikes again.

lib/unicore/mktables

index f2f77ce..77adadb 100644 (file)
@@ -586,6 +586,12 @@ sub uniques {
     # Encapsulated Cleverness".  p. 455 in first edition.
 
     my %seen;
+    # Arguably this breaks encapsulation, if the goal is to permit multiple
+    # distinct objects to stringify to the same value, and be interchangeable.
+    # However, for this program, no two objects stringify identically, and all
+    # lists passed to this function are either objects or strings. So this
+    # doesn't affect correctness, but it does give a couple of percent speedup.
+    no overloading;
     return grep { ! $seen{$_}++ } @_;
 }