Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
System2(3)	      User Contributed Perl Documentation	    System2(3)

       System2 - like system(),	but with access	to STDOUT and STDERR.

	 use System2;


	 my ($out, $err) = system2(@args);

	 my ($exit_value, $signal_num, $dumped_core) = &System2::exit_status($?);

	 print "EXIT: exit_value $exit_value signal_num	".
	       "$signal_num dumped_core	$dumped_core\n";

	 print "OUT:\n$out";
	 print "ERR:\n$err"

       The module presents an interface	for executing a	command, and gathering
       the output from STDOUT and STDERR.

       Benefits	of this	interface:

       - the Bourne shell is never implicitly invoked: saves a stray exec(),
	 and bypasses those nasty shell	quoting	problems.

       - cheaper to run	than open3().

       - augmented processing of arguments, to allow for overriding arg[0]
	 (eg. initiating a login shell).

       STDOUT and STDERR are returned in scalars.  $? is set.  (Split on $/ if
       you want	the expected lines back.)

       If $debug is set, on-the	fly diagnostics	will be	reported about how
       much data is being read.

       Provides	for convenience, a routine exit_status() to break out the exit
       value into separate scalars, straight from perlvar(1):

       - the exit value	of the subprocess

       - which signal, if any, the process died	from

       - reports whether there was a core dump.

       There are two interfaces	available:  a regular list, or named

       These are equivalent:

	 my @args = ( '/bin/sh', '-x', '-c', 'echo $0' );

	 my @args = ( path => '/bin/sh', args => [ '-c', 'echo $0' ] );

       To override arg[0], pass	in a arrayref for the first argument, or use
       the arg0	named parameter.  Contrast the prior argument lists with these

	 my @args = ( ['/bin/sh', '-sh'], '-c',	'echo $0' );

	 my @args = ( path => '/bin/sh', args => ['-c',	'echo $0'],
		      arg0 => '-sh' );

       Obviously, the returned scalars can be quite large, depending on	the
       nature of the program being run.	 In the	future,	I intend to introduce
       options to allow	for temporary file handles, but	for now, be aware of
       the potential resource usage.

       Although	I've been using	this module for	literally years	now
       personally, consider it lightly tested, until I get feedback from the
       public at large.	 (Treat	this as	a hint to tell me that you're using
       it. :)

       Have at it.

       Brian Reichert <>

       perlfunc(1), perlvar(1).

perl v5.32.1			  2005-01-20			    System2(3)


Want to link to this manual page? Use this URL:

home | help