Quando eseguo le chiamate system()
in Perl, di solito ispeziono il codice di ritorno in base allo perldocs. Beh, l'ho pensato. La maggior parte delle volte $rc!=0
è sufficiente per me. Recentemente ho aiutato due persone qui che hanno avuto problemi con le chiamate system()
quando eseguivano i loro script .cgi sotto apache. Li ho incaricato di esaminare la $rc
di
my $rc = system(...);
e li legati alla system()
documenti. Poi ho guardato più da vicino e ho notato i documenti non sono realmente parlando del $rc
ma invece circa $?
e mi sentivo un po 'imbarazzato e la seguente questione è stata sollevata:
C'è una differenza tra:
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;
}
e
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;
}
Oppure, in breve, è pari a $rc
$?
per system()
?
Ho controllato i documenti di system, wait e $? ma non è abbastanza chiaro per me. Ho sbagliato negli ultimi 15 anni usando $rc
?
Se si cattura il risultato a '$ rc' non c'è alcuna possibilità di' $ 'cambiare su di te prima di andare in giro a? usando quel valore. – tadman
Grazie a @tadman. Ho aggiunto un commento alla risposta accettata che si applica anche al tuo commento. Usare '$ rc' sembra il modo più pulito per me. – PerlDuck