NAME

Hash::Squash - Remove numbered keys from a nested hash/array

DESCRIPTION

This package provides squash and unnumber subroutines to simplify hash/array structures.

SYNOPSIS

squash

squash does 3 things to the argument recursively

1. Remove numbered keys from hashes and map them to arrays

2. Convert hashes/arrays with single element to single value

3. Convert empty hashes/arrays to `undef`

use Hash::Squash qw(squash);
my $hash = squash(+{
    foo => +{
        '0' => 'numbered',
        '1' => 'hash',
        '2' => 'structures',
    },
    bar => +{
        '0' => 'obviously a single value',
    },
    buz => [
        +{
            nest => +{
                '0' => 'nested',
                '2' => 'discreated',
                '3' => 'array',
            },
        },
        +{
            nest => +{
                '0' => 'FOO',
                '1' => 'BAR',
                '2' => 'BUZ',
            },
        },
    ],
});

Turns to:

+{
    foo => [
        'numbered',
        'hash',
        'structures',
    ],
    bar => 'obviously a single value',
    buz => [
        +{
            nest => [
                'nested',
                undef,
                'discreated',
                'array',
            ],
        },
        +{
            nest => [
                'FOO',
                'BAR',
                'BUZ',
            ],
        }
    ],
};

unnumber

unnumber is similar to squash, but keep hashes/arrays

use Hash::Squash qw(unnumber);
my $hash = unnumber(+{
    foo => +{
        '0' => 'numbered',
        '1' => 'hash',
        '2' => 'structures',
    },
    bar => +{
        '0' => 'obviously a single value',
    },
    buz => [
        +{
            nest => +{
                '0' => 'nested',
                '2' => 'partial',
                '3' => 'array',
            },
        },
    ],
});

Turns to:

+{
    foo => [
        'numbered',
        'hash',
        'structures',
    ],
    bar => ['obviously a single value'],
    buz => [
        +{
            nest => [
                'nested',
                undef,
                'partial',
                'array',
            ],
        },
    ],
};

AUTHOR

Shin Kojima <shin@kojima.org>

LICENSE

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.