Table 14.1 summarizes the operations that you have for launching a process.
Operation  | Standard Input  | Standard Output  | Standard Error  | Waited for?  | 
|---|---|---|---|---|
system()  | Inherited from program  | Inherited from program  | Inherited from program  | Yes  | 
Backquoted string  | Inherited from program  | Captured as string value  | Inherited from program  | Yes  | 
  | Connected to filehandle  | Inherited from program  | Inherited from program  | Only at time of   | 
  | Inherited from program  | Connected to filehandle  | Inherited from program  | Only at time of   | 
  | Not implemented  | Not implemented  | Not implemented  | Not implemented  | 
The simplest way to create a process is with the system function. Standard input, output, and error are unaffected (they're inherited from the Perl process). A backquoted string creates a process, capturing the standard output of the process as a string value for the Perl program. Standard input and standard error are unaffected. Both methods require that the process finish before any more code is executed.
A simple way to get an asynchronous process (one that allows the Perl program to continue before the process is complete) is to open a command as a filehandle, creating a pipe for the command's standard input or standard output. A command opened as a filehandle for reading inherits the standard input and standard error from the Perl program; a command opened as a filehandle for writing inherits the standard output and standard error from the Perl program.