icius has asked for the wisdom of the Perl Monks concerning the following question:
I am trying to convert a bunch of perl scripts from Unix to Windows. Previously the scripts were called from a batch file in Unix, but I would like to use Perl exclusively for this. I have tried just using a backtick to call the scripts, but any environment variables I have set in the master script don't seem to propogate to the child scripts. Trying convert them all to modules/packages would require way more time than I have unless I misunderstand the complexity of modules. Is there an easy way to call Perl scripts from within a Perl script and keep the environment variables?
Re: Calling Perl from Perl
by iburrell (Chaplain) on Dec 04, 2002 at 18:08 UTC
|
You should use system() instead of backticks. Backticks are for when you want to put the stdout of the program in a variable. Backticks and system will propagate environment variables on Windows.
| [reply] |
Re: Calling Perl from Perl
by broquaint (Abbot) on Dec 04, 2002 at 14:25 UTC
|
Is there an easy way to call Perl scripts from within a Perl script and keep the environment variables?
I'm not sure how well this will work on your Window box but you could fork() then exec() your external scripts e.g
@ENV{qw/ one two three /} = qw( foo bar baz );
exec "perl somescript.pl" if fork();
Or you could just do() them in a separate package e.g
{
package RandomPkgName;
do "somescript.pl";
}
The package declaration will avoid cluttering up your current namespace.
HTH
_________ broquaint | [reply] [d/l] [select] |
Re: Calling Perl from Perl
by Dog and Pony (Priest) on Dec 04, 2002 at 14:20 UTC
|
Have a look at do (perldoc -f do).
You have moved into a dark place.
It is pitch black. You are likely to be eaten by a grue. | [reply] |
Re: Calling Perl from Perl
by icius (Sexton) on Dec 04, 2002 at 14:44 UTC
|
Sorry all. Forget it. I forgot that when printing from a program called using backtick that it does not send to the stdout of the master program. Once I printed the return value from the backtick I found that environment variables do indeed get propogated to the environment of the called program. Thanks for the lightning quick responses!!! | [reply] |
|