系统调用

如果你已经知道下面说的这些和Perl无关的事实,那抱歉我还是要多说几句。每当一个进程在Windows或Linux系统(以及其他大部分的系统)中结束,它将产生一个16位的状态字,高8位表示返回码,值落在0到255之间,其中0约定俗成地表示无条件的成功,而其他值则表示不同程度的失败,另外8位则少有人关心,它们“表示了错误的原因,比如因为收到了信号或者产生core dump信息”。

你可以调用[exit](http://perldoc.perl.org/functions/exit.html),用你选择的返回码(0到255之间)退出Perl脚本。

Perl提供了不止一种方法通过一句调用语句来启动一个子进程、等待子进程执行结束、然后继续解释执行当前的脚本。无论用那种方法,你会发现紧接着,子进程结束时返回的状态字已经被填入了内置scalar变量$?中。你可以通过取出16位中的高8位来得到返回码:$? >> 8

我们可以用[system](http://perldoc.perl.org/functions/system.html)函数调用另一个程序,并且提供一个参数列表,system的返回值与填入$?的值一致:

  1. my $rc = system "perl", "anotherscript.pl", "foo", "bar", "baz";
  2. $rc >>= 8;
  3. print $rc; # "37"

另一种选择,我们也可以用反引号`` 在命令行中运行一条真正的命令,并且捕获它的标准输出。在scalar上下文中,整个输出被当做一整个字符串返回返回,而在列表上下文中,整个输出按一个字符串的array返回,其中每个字符串是输出中的一行。

  1. my $text = `perl anotherscript.pl foo bar baz`;
  2. print $text; # "foobarbaz"

如果anotherscript.pl包含形如下面这样的代码,你就能看到上面这种结果:

  1. use strict;
  2. use warnings;
  3. print @ARGV;
  4. exit 37;