Data-SmartMunge

 view release on metacpan or  search on metacpan

lib/Data/SmartMunge.pm  view on Meta::CPAN

}

# ABSTRACT: Munge scalars, hashes and arrays in flexible ways
use Exporter qw(import);
our %EXPORT_TAGS = (util => [qw(smart_munge delete_matching)],);
our @EXPORT_OK = @{ $EXPORT_TAGS{all} = [ map { @$_ } values %EXPORT_TAGS ] };
my %munger_dispatch = (
    STRING_CODE => sub { $_[1]->($_[0]) },
    ARRAY_CODE  => sub { $_[1]->($_[0]) },
    HASH_CODE   => sub { $_[1]->($_[0]) },
    HASH_HASH   => sub { +{ %{ $_[0] }, %{ $_[1] } } },  # overlay
);

sub smart_munge {
    my ($data, $munger) = @_;

    unless (defined $munger) {
        return $data unless wantarray;
        return @$data if ref $data eq 'ARRAY';
        return %$data if ref $data eq 'HASH';
    }

t/01_misc.t  view on Meta::CPAN

test_smart_munge(
    { a => 'foo', b => 'bar' },
    undef,
    { a => 'foo', b => 'bar' },
    'undefined munger'
);
test_smart_munge(
    { a => 'foo', b => 'bar' },
    { a => undef, c => 'baz' },
    { a => undef, b => 'bar', c => 'baz' },
    'overlay'
);



( run in 0.606 second using v1.01-cache-2.11-cpan-49f99fa48dc )