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
|