External programs

There are three ways to call external programs.

system() returns the exit status of the program

  1. my $rc = system("/bin/cp $file1 $file2"); # returns exit status values
  2. die "system() failed with status $rc" unless $rc == 0;

If possible, pass your arguments as a list, rather than a single string.

  1. my $rc = system("/bin/cp", $file1, $file2 );

This makes sure that nothing goes wrong in the shell if $file1 or $file2 have spaces or other special characters.

The output from system() is not captured.

XXX Discuss lower 8-bits of return code.

XXX Discuss running through a pipe

Backticks (``) and qx() operator return the output of the program

When you want the output, use one of these.

  1. my $output = `myprogram foo bar`.

You'll need to check the error code in $!.

If you're using backticks or qx(), prefer IPC::Open2 or IPC::Open3 instead, since they'll give you the same argument control and allow you to capture the output as well.

IPC::Open3 is the only way to capture STDERR in Perl without using shell commands.


Want to contribute?

Submit a PR to github.com/petdance/perl101