NAME
Hash::Util::Set - Set operations on hash keys
SYNOPSIS
use Hash::Util::Set qw(:all);
%x = (a => 1, b => 2, c => 3);
%y = (b => 4, c => 5, d => 6);
# Set operations
@keys = keys_union %x, %y; # (a, b, c, d)
@keys = keys_intersection %x, %y; # (b, c)
@keys = keys_difference %x, %y; # (a)
@keys = keys_symmetric_difference %x, %y; # (a, d)
# Set predicates
$bool = keys_disjoint %x, %y; # no common keys?
$bool = keys_equal %x, %y; # same keys?
$bool = keys_subset %x, %y; # x ⊆ y?
$bool = keys_proper_subset %x, %y; # x ⊂ y?
$bool = keys_superset %x, %y; # x ⊇ y?
$bool = keys_proper_superset %x, %y; # x ⊃ y?
# Key membership tests
$bool = keys_any %x, 'a', 'z'; # at least one exists?
$bool = keys_all %x, 'a', 'b', 'c'; # all exist?
$bool = keys_none %x, 'x', 'y', 'z'; # none exist?
# Combined operations
@sets = keys_partition %x, %y; # A \ B, A ∩ B, B \ A
DESCRIPTION
Hash::Util::Set provides set operations on hash keys. It treats the keys of a hash as a set and provides common set operations (union, intersection, difference), set predicates, and membership tests.
All operations work only on keys; values are ignored.
This module automatically uses the XS implementation if available, falling back to pure Perl otherwise.
FUNCTIONS
Set Operations
Order of keys is unspecified for all set operations.
keys_union
@keys = keys_union %x, %y;
Returns all keys present in either hash (A ∪ B).
keys_intersection
@keys = keys_intersection %x, %y;
Returns keys present in both hashes (A ∩ B).
keys_difference
@keys = keys_difference %x, %y;
Returns keys in %x but not in %y (A \ B).
keys_symmetric_difference
@keys = keys_symmetric_difference %x, %y;
Returns keys in either hash but not both (A △ B).
Set Predicates
keys_disjoint
$bool = keys_disjoint %x, %y;
True if hashes have no common keys (A ∩ B = ∅).
keys_equal
$bool = keys_equal %x, %y;
True if hashes have exactly the same keys (A = B).
keys_subset
$bool = keys_subset %x, %y;
True if all keys in %x are in %y (A ⊆ B).
keys_proper_subset
$bool = keys_proper_subset %x, %y;
True if %x ⊂ %y and they're not equal (A ⊂ B where A ≠ B).
keys_superset
$bool = keys_superset %x, %y;
True if %x contains all keys from %y (A ⊇ B).
keys_proper_superset
$bool = keys_proper_superset %x, %y;
True if %x ⊃ %y and they're not equal (A ⊃ B where A ≠ B).
Key Membership Tests
These functions test whether specific keys exist in a hash.
keys_any
$bool = keys_any %x, LIST;
True if at least one key in LIST exists in %x. Returns false for empty LIST.
keys_all
$bool = keys_all %x, LIST;
True if all keys in LIST exist in %x. Returns true for empty LIST.
keys_none
$bool = keys_none %x, LIST;
True if none of the keys in LIST exist in %x. Returns true for empty LIST.
Combined Operations
keys_partition
my ($only_x, $both, $only_y) = keys_partition %x, %y;
Partitions the union of keys from both hashes into three disjoint sets: keys only in %x (A \ B), keys in both hashes (A ∩ B), and keys only in %y (B \ A).
Returns a list with three array references.
ALIASES
Shorter aliases:
keys_or => keys_union
keys_and => keys_intersection
keys_sub => keys_difference
keys_xor => keys_symmetric_difference
EXPORTS
Nothing is exported by default. Functions can be imported individually or by category:
use Hash::Util::Set qw(keys_union keys_intersection); # individual functions
use Hash::Util::Set qw(:all); # all functions
use Hash::Util::Set qw(:operations); # set operations only
use Hash::Util::Set qw(:predicates); # predicates only
use Hash::Util::Set qw(:membership); # membership tests only
use Hash::Util::Set qw(:aliases); # short aliases only
Export Tags
:all-
All functions including operations, predicates, membership tests, and aliases.
:operations-
Set operations:
keys_union,keys_intersection,keys_difference,keys_symmetric_difference,keys_partition. :predicates-
Set predicates:
keys_disjoint,keys_equal,keys_subset,keys_proper_subset,keys_superset,keys_proper_superset. :membership-
Membership tests:
keys_any,keys_all,keys_none. :aliases-
Short aliases:
keys_or,keys_and,keys_sub,keys_xor.
IMPLEMENTATION
Automatically uses Hash::Util::Set::XS if available, otherwise falls back to Hash::Util::Set::PP.
SEE ALSO
Hash::Util, List::Util, Set::Scalar, Set::Object
AUTHOR
Christian Hansen <chansen@cpan.org>
COPYRIGHT AND LICENSE
Copyright (C) 2026 Christian Hansen
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.