Perl supports three ways (that I know of) of running external programs:
system
:
system PROGRAM LIST
as in:
system "abc";
backticks as in:
`abc`;
running it through a pipe as in:
open ABC, "abc|";
What are the differences between them? Here's what I know:
- You can use backticks and pipes to get the output of the command easily.
- that's it (more in future edits?)
The perlipc documentation explains the various ways that you can interact with other processes from Perl, and perlfunc's open documentation explains the piped filehandles.
There are also modules that handle these details with the cross-platform edge cases.
Getting the program's exit status is not limited to
system()
. When you callclose(PIPE)
, it returns the exit status, and you can get the latest exit status for all 3 methods from$?
.Please also note that
is the same as
system is also returning the exit value of the application (ERRORLEVEL in Windows). Pipes are a bit more complicated to use, as reading from them and closing them adds extra code. Finally, they have different implementation which was meant to do different things. Using pipes you're able to communicate back with the executed applications, while the other commands doesn't allow that (easily).
Also backticks redirects the executed program's STDOUT to a variable, and system sends it to your main program's STDOUT.