in reply to setting env vars from hash fails for me

Since use happens at compile-time, %hash is empty. That's not really a problem here, since keys %hash is treated as a literal string by qw//. Since you're not importing what you think you're importing, your eval fails. Since you're not checking $@, you don't know this.

I'd really rather write:

%ENV{ keys %hash } = values %hash;

but if you really want to get your way to work, here's a start. I'm not sure if Env returns lvalue subs, though:

#!/usr/bin/perl -w use strict; my %hash; BEGIN { $hash{APP_DIR} = "/usr/vendor/app/version/"; $hash{TMP_DIR} = "/usr/tmp/"; $hash{PROJ_DIR} = "/usr/people/userid/app/"; $hash{APP_LOCATION} = "/usr/vendor/app/version/bin/"; } use Env (keys %hash); foreach my $key (keys %hash) { eval("$key=\"$hash{$key}\""); print "Eval error '$@'\n" if $@; print " $key=$hash{$key}\n"; } system("printenv");