NAME
Hash::DefHash - Manipulate defhash
VERSION
This document describes version 0.072 of Hash::DefHash (from Perl distribution Hash-DefHash), released on 2021-07-21.
SYNOPSIS
# create a new defhash object, die when hash is invalid defhash
$dh
= Hash::DefHash->new;
# creates an empty defhash
$dh
= Hash::DefHash->new({
a
=>1});
# use the hashref
$dh
= Hash::DefHash->new({
"contains space"
=>1});
# dies!
# defhash() is a synonym for Hash::DefHash->new().
$dh
= defhash({
foo
=>1});
# return the original hash
$hash
=
$dh
->hash;
# list properties
@props
=
$dh
->props;
# list property names, values, and attributes, will return ($prop => $attrs,
# ...). Property values will be put in $attrs with key "". For example:
%content
= DefHash::Hash->new({
p1
=>1,
"p1.a"
=>2,
p2
=>3})->contents;
# => (p1 => {""=>1, a=>2}, p2=>3)
# get property value, will die if property does not exist
$propval
=
$dh
->prop(
$prop
);
# like prop(), but will return undef if property does not exist
$propval
=
$dh
->get_prop(
$prop
);
# check whether property exists
say
"exists"
if
$dh
->prop_exists(
$prop
);
# add a new property, will die if property already exists
$dh
->add_prop(
$prop
,
$propval
);
# add new property, or set value for existing property
$oldpropval
=
$dh
->set_prop(
$prop
,
$propval
);
# delete property, noop if property already does not exist. set $delattrs to
# true to delete all property's attributes.
$oldpropval
=
$dh
->del_prop(
$prop
,
$delattrs
);
# delete all properties, set $delattrs to true to delete all properties's
# attributes too.
$dh
->del_all_props(
$delattrs
);
# get property's attributes. to list defhash attributes, set $prop to undef or
# ""
%attrs
=
$dh
->attrs(
$prop
);
# get attribute value, will die if attribute does not exist
$attrval
=
$dh
->attr(
$prop
,
$attr
);
# like attr(), but will return undef if attribute does not exist
$attrval
=
$dh
->get_attr(
$prop
,
$attr
);
# check whether an attribute exists
@attrs
=
$dh
->attr_exists(
$prop
,
$attr
);
# add attribute to a property, will die if attribute already exists
$dh
->add_attr(
$prop
,
$attr
,
$attrval
);
# add attribute to a property, or set value of existing attribute
$oldatrrval
=
$dh
->set_attr(
$prop
,
$attr
,
$attrval
);
# delete property's attribute, noop if attribute already does not exist
$oldattrval
=
$dh
->del_attr(
$prop
,
$attr
,
$attrval
);
# delete all attributes of a property
$dh
->del_all_attrs(
$prop
);
# get predefined properties
say
$dh
->v;
# shortcut for $dh->get_prop('v')
say
$dh
->default_lang;
# shortcut for $dh->get_prop('default_lang')
say
$dh
->name;
# shortcut for $dh->get_prop('name')
say
$dh
->summary;
# shortcut for $dh->get_prop('summary')
say
$dh
->description;
# shortcut for $dh->get_prop('description')
say
$dh
->tags;
# shortcut for $dh->get_prop('tags')
# get value in alternate languages
$propval
=
$dh
->get_prop_lang(
$prop
,
$lang
);
# get value in all available languages, result is a hash mapping lang => val
%vals
=
$dh
->get_prop_all_langs(
$prop
);
# set value for alternative language
$oldpropval
=
$dh
->set_prop_lang(
$prop
,
$lang
,
$propval
);
CONTRIBUTOR
Steven Haryanto <sharyanto@cpan.org>
FUNCTIONS
defhash([ $hash ]) => OBJ
Shortcut for Hash::DefHash->new($hash)
. As a bonus, can also detect if $hash
is already a defhash and returns it immediately instead of wrapping it again. Exported by default.
METHODS
new
Usage:
$dh
= Hash::DefHash->new([
$hash
],[
%opts
]);
Constructor. Create a new Hash::DefHash object, which is a thin OO skin over the regular Perl hash. If $hash
is not specified, a new anonymous hash is created.
Internally, the object contains a hash reference which contains reference to the hash (bless({hash=>$orig_hash, ...}, 'Hash::DefHash')
). It does not create a copy of the hash or bless the hash directly. Be careful not to assume that the two are the same!
Will check the keys of hash for invalid properties/attributes and will die if one is found, e.g..
$dh
= Hash::DefHash->new({
"contains space"
=> 1});
# dies!
Known options:
check => BOOL (default: 1)
Whether to check that hash is a valid defhash. Will die if hash turns out to contain invalid keys/values.
parent => HASH/DEFHASH_OBJ
Set defhash's parent. Default language (
default_lang
) will follow parent's if unset in the current hash.
hash
Usage:
$hashref
=
$dh
->hash;
Return the original hashref.
check
Usage:
$dh
->check;
contents
Usage:
my
%contents
=
$dh
->contents;
default_lang
Usage:
$default_lang
=
$dh
->default_lang;
props
Usage:
@props
=
$dh
->props;
Return list of properties. Will ignore properties that begin with underscore, e.g.:
$dh
= defhash({
a
=>1,
_b
=>2});
$dh
->props;
prop
Usage:
$val
=
$dh
->prop(
$prop
[ , \
%opts
]);
Get property value, will die if property does not exist.
Known options:
die
Bool. Default true. Whether to die when requested property is not found.
alt
Hashref.
mark_different_lang
Bool. Default false. If set to true, then when a requested property is found but differs (only) in the language it will be returned but with a mark. For example, with this defhash:
{
name
=>
"Chair"
,
"name.alt.lang.id_ID"
=>
"Kursi"
}
then:
$dh
->prop(
"name"
, {
lang
=>
"fr_FR"
});
will die. But:
$dh
->prop(
"name"
, {
lang
=>
"fr_FR"
,
mark_different_lang
=>1});
will return:
"{en_US Chair}"
or:
"{id_ID Kursi}"
get_prop
Usage:
my
$val
=
$dh
->get_prop(
$prop
[ , \
%opts
]);
Like "prop"(), but will return undef if property does not exist.
prop_exists
Usage:
$exists
=
$dh
->prop_exists;
add_prop
set_prop
del_prop
del_all_props
attrs
attr
get_attr
attr_exists
add_attr
set_attr
del_attr
del_all_attrs
defhash_v
v
name
summary
description
tags
get_prop_lang
Usage:
my
$val
=
$dh
->get_prop_lang(
$prop
,
$lang
[ , \
%opts
]);
This is just a special case for:
$dh
->prop(
$prop
, {
alt
=>{
lang
=>
$lang
},
mark_different_lang
=>1,
%opts
});
get_prop_all_langs
set_prop_lang
HOMEPAGE
Please visit the project's homepage at https://metacpan.org/release/Hash-DefHash.
SOURCE
Source repository is at https://github.com/perlancar/perl-Hash-DefHash.
BUGS
Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=Hash-DefHash
When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.
SEE ALSO
DefHash specification
AUTHOR
perlancar <perlancar@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2021, 2020, 2018, 2016, 2015, 2014, 2012 by perlancar@cpan.org.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.