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");
In reply to Re: setting env vars from hash fails for me
by chromatic
in thread setting env vars from hash fails for me
by ccarden
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |