从Perl中的命令获取返回代码和输出

时间:2015-10-01 14:43:52

标签: perl return-value

我试图编写一个实用程序,它将通过一个看起来像这样的文件:

# Directory | file name | action | # of days without modification to the file for the command to take action
/work/test/|a*|delete|1
/work/test/|b*|compress|0
/work/test/|c*|compress|1

我的脚本将通过文件决定是否,例如,/ work / test /下的文件是否以' a'开头。在过去的1天内没有被修改过,如果有的话,它会删除它们。

为此,我使用find命令。示例:

my $command = "find " . $values[0] . $values[1] . " -mtime +" . $values[3] . " -delete ;\n";
system ($command);

但是,我已经被要求检索每个步骤的返回码,以验证每个步骤是否正常。

现在,我知道system()返回返回代码,反引号返回输出。但是,我怎样才能得到两者?

2 个答案:

答案 0 :(得分:12)

运行反引号后,返回代码可在{{3}}中找到。

  

MFMailComposeViewController

     

最后一个管道关闭,反引号(``)命令,成功调用wait()或waitpid()或来自system()运算符返回的状态。这只是传统Unix wait()系统调用返回的16位状态字(或者看起来像是这样)。

$?

答案 1 :(得分:2)

反引号,system()等的通用解决方案是使用${^CHILD_ERROR_NATIVE}变量。查看perlvar perldoc: http://perldoc.perl.org/perlvar.html#%24%7b%5eCHILD_ERROR_NATIVE%7d

  

$ {^ CHILD_ERROR_NATIVE}   最后一个管道关闭,反引号(``)命令,成功调用wait()或waitpid()或来自system()操作符返回的本机状态。在POSIX类系统上,可以使用POSIX模块提供的WIFEXITED,WEXITSTATUS,WIFSIGNALED,WTERMSIG,WIFSTOPPED,WSTOPSIG和WIFCONTINUED函数对此值进行解码。