##
sub expand {
my $macros = shift;
my $result;
@{$result}{keys %$macros} = map { eval $_ } values %$macros;
return if @@;
$result;
}
##
##
sub expand {
my $macros = shift;
my $result;
my @errors;
for ( keys %$macros ) {
$result->{$_} = eval $macros->{$_};
push @errors, $@ if $@;
}
if ( @errors ) {
$@ = join "\n", @errors;
return;
}
$result;
}