in reply to updated question: Initializing hashes of hashes

If I add strictures (use strict; use warnings;) to your sample code:

use strict; use warnings; my $name = "Father" ; my @terms = qw(Mom Wife Son Daughter); my %fam_old = map{ $tool => { $_,1 }} @terms; print Dumper \%fam_old,"\n";

it prints:

Global symbol "$tool" requires explicit package name at ...\noname.pl +line 6. Execution of ...\noname.pl aborted due to compilation errors.

Mybe you intended the hash assignment to be:

my %fam_old = map{$_, 1} @terms;

in which case the code prints:

$VAR1 = { 'Son' => 1, 'Daughter' => 1, 'Wife' => 1, 'Mom' => 1 }; $VAR2 = ' ';
Premature optimization is the root of all job security