Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Re: Re: .bat and perl mystery

by Anonymous Monk
on Jun 12, 2002 at 16:54 UTC ( #173926=note: print w/replies, xml ) Need Help??

in reply to Re: .bat and perl mystery
in thread .bat and perl mystery

This is it, but I don't think it will be of much help. In order to use "/USEENV", I first have to execute the batch file: 'vcvars32.bat'. If I execute it fromt he command line, things work fine, but when I call it in my script they don't
sub Build { my $vcvars32 = 'VCVARS32.BAT'; system ($vcvars32); $command = join("", "msdev ", "$workspace", "\\", "$projectname ", + "\/MAKE ", "\"$name ", "\- ", "$activeconfiguration\" ", "\/REBUILD +\/OUT ", "$workspace\\", "$log_name ", "\/USEENV"); $start = localtime time; print "\nProcessing build..."; system "$command"; print "Done\n"; $finish = localtime time; }

Replies are listed 'Best First'.
Re: Re: Re: .bat and perl mystery
by jsprat (Curate) on Jun 12, 2002 at 17:57 UTC
    As you've found out, you can't set environment variables in the parent process. When you try, you spawn a new command process, set the environment variable and exit that process, losing whatever changes you made (see perldoc -q environment or here).

    What you can do is use the %ENV hash to set the environment before using VS to build your project.

    I can't remember what vcvars32.bat sets, but something like this:


    should work, as long as it is set before you begin the build.

      Sorry, I'm not sure I quit understand. Should I create a child process solely for the execution of the .bat file and the use the parent process to continue running the main script?
        Make the changes in the script, before you start the build. These changes will be visible in any child process.
        sub Build { # my $vcvars32 = 'VCVARS32.BAT'; << comment out these # system ($vcvars32); << two lines # set your environment variables (the same ones # vcvars32.bat sets) like so: $ENV{LIB} = 'D:\MSVCDIR\LIB;'.$ENV{LIB}; $ENV{PATH} = 'D:\MSVCDIR\BIN;'.$ENV{PATH]; system $command; # this now sees the variables set above

        check perlvar for a little more info on %ENV

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://173926]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (3)
As of 2022-05-19 23:00 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (72 votes). Check out past polls.