cadphile has asked for the wisdom of the Perl Monks concerning the following question:
1. single string argument (invokes a shell and interprets the string as a shell command).
system( "ls *.txt" );
2. a list of more than one element (invokes the list elements as a program, without shell interpolation).
my @list=("someprog", "progarg1", "progarg2"); system( @list );
In the first format, SIGINT cannot be captured in the return status of the system() call, but in the second format, if a signal is sent to the program, it is passed into the Perl script through the system() return status.
I need to capture SIGINT, but I need to use system commands with piping, and also redirecting the output to a tmpfile.
I've searched for some CPAN module that might already do this but haven't found anything. Something like this:
$sysret = system("prog1 file1 | filter -v $version > $tmpfile 2>&1"); $syssig = $sysret & 0x7f;
Splitting the pipe, and redirection operators into separate list elements, and then using the list format, doesn't work: the operators are not interpreted properly.
Any suggestions??
Thanks!
-cadphile
|
|---|