use Safe; my $config = Safe->new; *{ $config->varglob($_) } = $handler{$_} for keys %handler; $ok = $config->reval( $cfg_str ); # Or: $ok = $config->rdo( $config_source ); $err = $@; #### join ";\n", map "local *$_ = \$handler{$_}", keys %handler; #### local *handler_localizer = sub { if( my $name = each %handler ) { no strict 'refs'; local *{$name} = $handler{$name}; handler_localizer(); } else { $ok = eval $cfg_str; $err = $@; } };