App::Chart::Tie::Hash::Union -- union of multiple hashes
use App::Chart::Tie::Hash::Union; my %h1 = (a => 1, b => 2); my %h2 = (x => 3, y => 3); my %union; tie %union, \%h1, \%h2; print $union{a},"\n"; # entry in %h1 print $union{y},"\n"; # entry in %h2
App::Chart::Tie::Hash::Union makes a hash present the keys and values of a given set of other underlying hash tables. Accessing the tied hash looks in each of those hashes for the desired key. The tied hash hold nothing of it's own but looks dynamically at the underlying hashes, so it reflects their current contents at any given time.
App::Chart::Tie::Hash::Union
$tiedhash{$key}
Fetching looks in each unioned hash for the first with exists $h-{$key}>.
exists $h-
$tiedhash{$key} = $value
Storing looks in each unioned hash for one with exists $h-{$key}> and stores to that entry. If none have $key already then a new entry is made in the first unioned hash. If there are no unioned hashes the store croaks.
$key
delete $tiedhash{$key}
Deleting deletes $key from each of the unioned hashes.
clear %tiedhash
Clearing clears each unioned hash.
keys %tiedhash
Returns the keys of all the unioned hashes.
each %tiedhash
Iterates the unioned hashes. Currently this is implemented using a corresponding each on those underly hashes, so don't call each, keys or values on those or it will upset the iterated position of the tied hash.
each
keys
values
scalar %tiedhash
In scalar context the tied hash returns bucket usage counts like 3/64 like an ordinary hash, made by adding up the unioned hashes. If a unioned hash returns something other than a bucket count in scalar context (which can happen if it in turn is also a tied hash) then it's counted as 1/1 if true or 0/0 if false.
3/64
In Perl 5.8 and earlier tied hashes which don't implement the SCALAR method always return 0 as if it's empty, when it may not be. This of course will propagate up through a App::Chart::Tie::Hash::Union to make it appear empty when it may not be.
SCALAR
tie %hash, 'App::Chart::Tie::Hash::Union', \%h1, \%h2, ...
Tie hash %hash to present the contents of the given %h1, %h2, etc.
%hash
%h1
%h2
$hashref = App::Chart::Tie::Hash::Union->new (\%h1, \%h2, ...)
Return a ref to a newly created hash table tied to the given %h1, %h2, etc. For example
my $href = App::Chart::Tie::Hash::Union->new (\%h1, \%h2);
is the same as
tie (my %hash, 'App::Chart::Tie::Hash::Union', \%h1, \%h2); my $href = \%hash;
If you want your own %hash as such then the plain tie is easier. If you want an hashref to pass around to other funcs then new saves a line of code.
tie
new
The tie object associated with the tied hash, as returned by the tie or obtained later with tied, has the following methods.
tied
$thobj->add (\%h3, ...)
Add further hash tables to the union.
@list = $thobj->hashes()
Return a list of hashrefs which are currently being unioned.
Hash::Union, Hash::Merge
To install App::Chart, copy and paste the appropriate command in to your terminal.
cpanm
cpanm App::Chart
CPAN shell
perl -MCPAN -e shell install App::Chart
For more information on module installation, please visit the detailed CPAN module installation guide.