#!perl ## no critic (TidyCode)
use strict;
use warnings;
use Hash::Map qw(hash_map);
require Data::Dumper;
our $VERSION = '0.001';
# example form data
my $form = { qw(
country Germany
country_code D
city Examplecity
zip 01234
street Examplestreet
first_name Steffen
family_name Winkler
) };
# example user object
my $user = {
account => ( bless { account => 'STEFFENW' }, __PACKAGE__ ),
};
sub get_account { my $self = shift; return $self->{account} }
# example mail data
my $mail = {
name => 'Steffen Winkler',
address => 'steffenw@example.com',
subject => 'Example',
};
my %hash_map = (
hash_map(
# source_ref,
$form,
# copy_keys
[ qw(street city country_code) ],
{
# modify
country_code => sub {
return $_ eq 'D' ? 'DE' : $_;
},
# map_keys
zip => 'zip_code',
},
),
# merge_hash
name => "$form->{first_name} $form->{family_name}",
hash_map(
$user,
# copy_keys
[ qw(account) ],
{
# modify
account => sub {
return $_->get_account;
},
},
),
hash_map(
$mail,
[
# copy_keys
qw(name address),
sub {
return "mail_$_";
},
],
),
);
() = print Data::Dumper->new([\%hash_map], ['hash_map'])->Indent(1)->Dump;
# $Id$