 <p>As you've noticed, system() waits for the other process. Internally, it forks() another process, that calls exec() to run your batch file and the original process waits. If you can't use CPAN then you can call fork() and exec() yourself and just not wait for the child process to finish.</p> <p>Read these first:</p> <ul> <li><a href="http://perldoc.perl.org/perlipc.html" rel="nofollow">http://perldoc.perl.org/perlipc.html</a></li> <li>perldoc -f fork</li> <li>perldoc -f exec</li> </ul> <p>Pay attention to the bit about signals and zombie processes. Once you've understood how it works it's simple enough.</p> <p>If your batch file generates output you need to process in your perl then you can use open() to create a pipe to it (perldoc -f open).</p> <p>Similar questions have been asked before:</p> <p><a href="http://stackoverflow.com/questions/799968/whats-the-difference-between-perls-backticks-system-and-exec">What&#39;s the difference between Perl&#39;s backticks, system, and exec?</a></p>