Когда я выполняю вызовы system()
в Perl, я обычно проверяю код возврата в соответствии с perldocs. Ну, я так и думал. Большую часть времени $rc!=0
достаточно для меня. Недавно я помог двум людям, у которых возникли проблемы с вызовами system()
при запуске их .cgi-скриптов под apache. Я попросил их изучить $rc
of
my $rc = system(...);
и связали их с документами system()
. Затем я подошел поближе и заметил, что документы на самом деле не говорят о $rc
, а вместо этого о $?
, и я чувствовал себя немного смущенным, и возник вопрос:
Есть ли разница между:
system(...);
if ($? == -1) {
print "failed to execute: $!\n";
}
elsif ($? & 127) {
printf "child died with signal %d, %s coredump\n",
($? & 127), ($? & 128) ? 'with' : 'without';
}
else {
printf "child exited with value %d\n", $? >> 8;
}
и
my $rc = system(...);
if ($rc == -1) {
print "failed to execute: $!\n";
}
elsif ($rc & 127) {
printf "child died with signal %d, %s coredump\n",
($rc & 127), ($rc & 128) ? 'with' : 'without';
}
else {
printf "child exited with value %d\n", $rc >> 8;
}
Или, короче говоря, $rc
равно $?
для system()
?
Я просмотрел документы system, wait и $?, но мне это не совсем понятно. Я делал неправильно в течение последних 15 лет, используя $rc
?