To cross-check a personal selection of modules which offer:
Array and Set modules
|
Method lists
|
"
|
Overloaded methods
|
Module names are read from data/module.list.ini, which is shipped with the distro. |
Each module's data has an indicator - 'include = Yes/No' - which makes it easy to edit & re-run. |
Further, each module has an indicator - 'overload_type = 1/2/3' - to specify the syntax to look for when processing overloads. |
Per-module notes are handled using the same mechanism. |
Excluded modules are listed at the end of this report. |
Name | Version | Method count | Notes |
1: Array::AsObject | 1.02 | 41 | |
2: Object::Array | 0.060 | 43 | |
3: Set::Array | 0.26 | 47 | |
4: Set::Bag | 1.009 | 17 | Supports multisets [*] |
5: Set::Light | 0.04 | 6 | |
6: Set::Object | 1.28 | 39 | |
7: Set::Scalar | 1.25 | 44 | |
8: Set::SortedArray | 0.02 | 21 | |
9: Set::Tiny | 0.01 | 23 | |
10: Set::Toolkit | 0.11 | 16 | |
Name | Version | Method count | Notes |
[*] Multisets means new() takes a hash, so elements are (name, value) pairs. |
Method names are found by scanning the source for /^sub.../. |
Method names starting with '_' are ignored. |
Also ignored are indented subs as in Set::Toolkit::TieArray, which is within the source of Set::Toolkit. |
Sub-class files for Object::Array and Set::Scalar have been scanned and included. |
Scanning the source means modules must be installed, but no attempt is made to load them at run-time. |
Source files are found by running 'mwhere' which is shipped with the marvellous App::moduleswhere. |
Version numbers are found by running 'mversion' which is shipped with the marvellous Module::Version. |
Method | Array::AsObject | Object::Array | Set::Array | Set::Bag | Set::Light | Set::Object | Set::Scalar | Set::SortedArray | Set::Tiny | Set::Toolkit |
1: AUTOLOAD | Yes | |||||||||
2: DESTROY | Yes | |||||||||
3: ELEMENT_SEPARATOR | Yes | |||||||||
4: SET_FORMAT | Yes | |||||||||
5: STORABLE_freeze | Yes | |||||||||
6: STORABLE_thaw | Yes | |||||||||
7: after | Yes | |||||||||
8: after_incl | Yes | |||||||||
9: all | Yes | |||||||||
10: any | Yes | |||||||||
11: append | Yes | |||||||||
12: apply | Yes | |||||||||
13: are_equal | Yes. eq | |||||||||
14: as_array | Yes. @{} | |||||||||
15: as_hash | Yes | Yes | ||||||||
16: as_string | Yes. "" | Yes. "" | Yes | Yes | Yes. "" | |||||
17: as_string_callback | Yes | Yes | Yes | |||||||
18: asymmetric_difference | Yes | |||||||||
19: at | Yes | Yes | ||||||||
20: bag | Yes. & | Yes. "" | ||||||||
21: before | Yes | |||||||||
22: before_incl | Yes | |||||||||
23: binary_intersection | Yes. * | |||||||||
24: cartesian_product | Yes | |||||||||
25: cartesian_product_iterator | Yes | |||||||||
26: clear | Yes | Yes | Yes | Yes | Yes | |||||
27: clone | Yes | Yes. copy | ||||||||
28: cmp | Yes | |||||||||
29: compact | Yes | Yes | ||||||||
30: compare | Yes | Yes. <=> | Yes | |||||||
31: complement | Yes | Yes. neg | Yes | |||||||
32: contains | Yes | Yes | Yes. has | |||||||
33: copy | Yes. = | |||||||||
34: count | Yes | Yes | ||||||||
35: cpop | Yes | |||||||||
36: cshift | Yes | |||||||||
37: delete | Yes | Yes | Yes | Yes. -= | Yes. remove | Yes | Yes | |||
38: delete_at | Yes | Yes | ||||||||
39: difference | Yes | Yes. - | Yes. - | Yes. - | Yes | Yes. - | Yes | |||
40: duplicates | Yes | |||||||||
41: each | Yes | |||||||||
42: elem | Yes | |||||||||
43: element | Yes | Yes | Yes. member | |||||||
44: elements | Yes | Yes | Yes | Yes. members | Yes | |||||
45: elems | Yes | |||||||||
46: empty_clone | Yes | |||||||||
47: eq | Yes. eq | |||||||||
48: equal | Yes. == | |||||||||
49: err | Yes | |||||||||
50: errmsg | Yes | |||||||||
51: exists | Yes | Yes | Yes | Yes. contains | ||||||
52: extend | Yes | |||||||||
53: false | Yes | |||||||||
54: fill | Yes | Yes | Yes | |||||||
55: find | Yes | |||||||||
56: first | Yes | Yes | Yes | |||||||
57: first_index | Yes | |||||||||
58: first_value | Yes | |||||||||
59: firstidx | Yes | |||||||||
60: firstval | Yes | |||||||||
61: flatten | Yes | |||||||||
62: foreach | Yes | |||||||||
63: grab | Yes | |||||||||
64: grep | Yes | |||||||||
65: has | Yes | Yes | ||||||||
66: have_same_universe | Yes | |||||||||
67: impose | Yes | |||||||||
68: index | Yes | Yes | ||||||||
69: indexes | Yes | |||||||||
70: indices | Yes | |||||||||
71: insert | Yes. += | Yes | Yes | Yes | Yes | |||||
72: insert_after | Yes | |||||||||
73: insert_after_string | Yes | |||||||||
74: intersection | Yes | Yes. * | Yes. & | Yes | Yes | Yes | Yes | |||
75: invert | Yes | Yes | Yes | |||||||
76: is_disjoint | Yes | Yes. != | Yes. != | Yes | ||||||
77: is_empty | Yes | Yes | Yes. is_null | Yes | ||||||
78: is_equal | Yes | Yes. == | Yes. == | Yes. == | Yes | |||||
79: is_key | Yes | |||||||||
80: is_null | Yes | Yes. is_empty | ||||||||
81: is_ordered | Yes | |||||||||
82: is_proper_subset | Yes. < | Yes. < | Yes | |||||||
83: is_proper_superset | Yes. > | Yes. > | Yes | |||||||
84: is_properly_intersecting | Yes | Yes | ||||||||
85: is_subset | Yes | Yes. <= | Yes. <= | Yes | ||||||
86: is_superset | Yes. >= | Yes. >= | Yes | |||||||
87: is_unique | Yes | |||||||||
88: is_universal | Yes | |||||||||
89: isa | Yes | |||||||||
90: ish_int | Yes | |||||||||
91: join | Yes | Yes | ||||||||
92: last | Yes | Yes | Yes | |||||||
93: last_index | Yes | |||||||||
94: last_value | Yes | |||||||||
95: lastidx | Yes | |||||||||
96: lastval | Yes | |||||||||
97: length | Yes | Yes | ||||||||
98: list | Yes | |||||||||
99: map | Yes | |||||||||
100: max | Yes | Yes | ||||||||
101: maximize | Yes. |= | |||||||||
102: member | Yes | |||||||||
103: members | Yes | |||||||||
104: merge | Yes. + | |||||||||
105: min | Yes | |||||||||
106: minimize | Yes. &= | |||||||||
107: minmax | Yes | |||||||||
108: natatime | Yes | |||||||||
109: ne | Yes. ne | |||||||||
110: new | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
111: new_presorted | Yes | |||||||||
112: none | Yes | |||||||||
113: not_equal | Yes | Yes. != | Yes. != | |||||||
114: not_subset | Yes | |||||||||
115: notall | Yes | |||||||||
116: null | Yes | |||||||||
117: op_intersection | Yes. * | |||||||||
118: op_invert | Yes. / | |||||||||
119: op_symm_diff | Yes. % | |||||||||
120: op_union | Yes. + | |||||||||
121: ordered_elements | Yes | |||||||||
122: over_delete | Yes | |||||||||
123: pack | Yes | |||||||||
124: pop | Yes | Yes | Yes. >>= | |||||||
125: power_set | Yes | |||||||||
126: power_set_iterator | Yes | |||||||||
127: print | Yes | |||||||||
128: proper_subset | Yes. < | |||||||||
129: proper_superset | Yes. > | |||||||||
130: push | Yes | Yes | Yes. << | |||||||
131: randomize | Yes | Yes | ||||||||
132: remove | Yes. delete | Yes | ||||||||
133: reverse | Yes | Yes | ||||||||
134: rindex | Yes | Yes | ||||||||
135: rotate | Yes | Yes | ||||||||
136: search | Yes | |||||||||
137: set | Yes | Yes | Yes | |||||||
138: shift | Yes | Yes | Yes. >> | |||||||
139: size | Yes | Yes | Yes. bool | Yes | Yes | Yes | ||||
140: slice | Yes | |||||||||
141: sort | Yes | Yes | ||||||||
142: splice | Yes | Yes | Yes | |||||||
143: strengthen | Yes | |||||||||
144: strong_pkg | Yes | |||||||||
145: subset | Yes. <= | |||||||||
146: sum | Yes. + | |||||||||
147: superset | Yes. >= | |||||||||
148: symmetric_difference | Yes | Yes. % | Yes | Yes | Yes. % | Yes. unique | ||||
149: tie_array_pkg | Yes | |||||||||
150: tie_hash_pkg | Yes | |||||||||
151: true | Yes | |||||||||
152: union | Yes | Yes. + | Yes. | | Yes | Yes | Yes | Yes | |||
153: uniq | Yes | |||||||||
154: unique | Yes | Yes | Yes | Yes | Yes. / | |||||
155: universe | Yes | |||||||||
156: unordered_elements | Yes | |||||||||
157: unshift | Yes | Yes | Yes. <<= | |||||||
158: version | Yes | |||||||||
159: weak_pkg | Yes | |||||||||
160: weak_set | Yes | |||||||||
161: weaken | Yes | |||||||||
Method | Array::AsObject | Object::Array | Set::Array | Set::Bag | Set::Light | Set::Object | Set::Scalar | Set::SortedArray | Set::Tiny | Set::Toolkit |
A cell containing 'Yes' means that module has a method of that name. |
A token after 'Yes' is the overloaded operator defined in that module for that method. |
Just because 2 modules have a method with the same name does not mean the subs' behaviour is identical. |
Obviously names like symmetric_difference() are presumably the same, but there is a catch: |
One module may expect you to call methods as functions, while the other uses methods (with $obj -> X() ). |
As always, RTFM! |
In order to make life difficult:
Object::Array fiddles a list of method names copied from List::MoreUtils. |
Set::Light has 2 aliases for exists: has and contains. |
Set::Object and Set::Toolkit define some overloads via subs. These are ignored. |
Name | Notes |
1: Array::Compare | Array::Compare has very limited (focused) functionality |
2: Array::Uniq | Array::Uniq likewise |
3: Array::Utils | Array::Utils likewise |
4: Bit::Vector | Bit::Vector is sophisticated, but is more like an underlying support mechanism for sets and hence leaves a lot up to the end-user |
5: EO::Array | EO::Array is an OO wrapper around Perl's array type |
6: Set::DynamicGroups | Set::DynamicGroups handles multisets, as does Set::Bag. It's designed to allow groups to be defined dynamically by rules based on other groups. It has partial support for nested groups |
7: Set::Groups | Set::Groups supports nested groups, and hence a completely different set of methods |
8: Set::Hash | Set::Hash allows you to create strings as objects and use OO-style methods on them. It's a sub-class of Set::Array |
9: Set::NestedGroups | Set::NestedGroups is like Set::Groups |
10: Set::Relation | Set::Relation is an emulator for RDBMS-style relational data |
Name | Notes |
Author
|
|
Date
|
2012-05-22
|
OS
|
Debian V 6.0.4
|
Perl
|
5.14.2
|