http://www.perlmonks.org?node_id=985697


in reply to I need to export variable as another user

Aside from the many errors in your script, what you're trying to do won't work. A shell's environment is only passed to its child processes (if exported), not its parent or any siblings. So when you open a subshell with system in line 6 and set some environment variables for that subshell by running a couple of export commands, those variables go away as soon as that subshell closes and the system command returns. They will not be passed to the subshells started by your next two commands.

So you have a few options: only open one subshell, and talk to it with a two-way pipe. That could be done with a module like IPC::Open3, or a few other ways. You could also put your export commands in an file that's automatically sourced by your particular shell, but that would depend on your shell. Another (maybe simplest) option would be to set your environment variables within your Perl script by using the %ENV hash, so they can be inherited by any subshells. No need to try to export them in a dot-profile:

print 'Before setting: ', `echo \$MYVAR`; $ENV{MYVAR} = 'Howdy all!'; print 'After setting: ', `echo \$MYVAR`;

Aaron B.
Available for small or large Perl jobs; see my home node.