my %for_later; foreach my $name (@array) { eval <<"HERE"; my \$$name = new OBJ; do_stuff(\$$name); $for_later{$name} = \$$name; HERE } #### my %for_later; foreach my $name (@array) { no strict; ${$name} = new OBJ; do_stuff(${$name}); $for_later{$name} = ${$name}; } #### my %for_later; foreach my $name (@array) { my $obj = new OBJ; do_stuff($obj); $for_later{$name} = $obj; } #### my $obj = new OBJ($name)