Provided by: libhash-defhash-perl_0.072-1_all bug

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

        use Hash::DefHash; # imports defhash()

        # 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.