The differences between these various elements are detailed in exec, system, fork, pipe, syscall and eval. You've also forgotten backticks, which is the method I need most often. Please note that eval does not invoke the operating system at all, rather invokes the Perl interpreter on the string you pass it. What are you trying to do?