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


in reply to executing a .bat or .exe from within perl script ??

exec 'batch.bat';

or

system 'batch.bat';

--
Check out my Perlmonks Related Scripts like framechat, reputer, and xNN.

Replies are listed 'Best First'.
Re: Re: executing a .bat or .exe from within perl script ??
by andreychek (Parson) on Jul 03, 2001 at 00:21 UTC
    I agree with epoptai that exec and system could work. There are good and bad points with each, and another possible solution that may be better for you.

    If you use 'exec batchfile.bat', it does execute that program.. but it never returns to the currently running program. The current program exists right there and then. Sometimes, that is what you want.

    If you use 'system batch.bat', your current program forks to run that program, and then returns. However, the return value that it returns to your program is NOT the output of the program it ran, but instead returns the program's exit status. Sometimes, this is what you want.

    If you want to run a program, and retrieve that programs output, you need to use backticks, such as:
    my $output = `batchfile.bat`;
    That will run the batchfile, AND return it's output to the variable $output.
    -Eric
      hi andreychek, thanks for your answer. the 'system' command was what i was looking for. if you have time can you state an example where i would use 'exec over system' and not just 'system' all the time? Thank you
        Well, you would use 'exec' if you wanted to run an external program as the last step of your Perl script. Control would never return to your Perl script, you'd be finished the program at that point.

        You would choose 'system' if you were in the middle of your Perl script, you wanted to run an external program, but you had more Perl code to be run before you were finished. Even if you simply wanted to check to return status of the program you run, you'd need to use system.

        In most cases, if you have system vs. exec, system tends to be the one you want to use. If you use exec, you have to trust the external program that it run correctly, there wouldn't be a way from Perl to check that, since the Perl script quits at the exec statement, and gives full control to the external program.

        I tried to think of an example of a good use for exec, but every example I could come up with seemed to be better off with system -- largely because I felt it would be best to check that program's return status. However, someone else may be able to come up with an example of where that wouldn't be necessary.
        -Eric