It seems that you have more than enough help posted above, so let me just quickly make sure that you understand the differences between fork, exec, and system. They are very often confusing. Your analysis of exec is not entirely correct.
exec replaces the current process binary with a new executable binary. Hence, if you ran a perl script and called exec in the same process, you would lose anything that you wrote in that perl script (with some exceptions which are not relevant under Winduz).
fork will create a new process and populate it with instructions or a new process, hence giving birth to
system which is essentially a fork and exec. The process creates a child process and populates it with the shell command. It then proceeds to waitpid on that system call.