我努力去理解別人寫的Perl腳本。我不明白在腳本中使用$?
。任何人都可以解釋我下面的目的嗎?
system("perform_task.sh", "-param1");
if(($? >> 8) != 0) {
print("perform_task.sh failed ");
}
我努力去理解別人寫的Perl腳本。我不明白在腳本中使用$?
。任何人都可以解釋我下面的目的嗎?
system("perform_task.sh", "-param1");
if(($? >> 8) != 0) {
print("perform_task.sh failed ");
}
爲了找到任何變量的含義,你可以用相對較新的版本的Perl的命令行中輸入
$ perldoc -v '$?'
或掃描您的計算機安裝perldoc perlvar
。通常情況下,最好是閱讀的perl
具體的版本,您有文件,但在緊要關頭,銘記由於版本差異的任何可能的陷阱,網絡版也將這樣做:perldoc -v '$?':
由最後一個管道關閉,反向(
``
)命令,成功調用wait()
或waitpid()
或從system()
運算符返回的狀態。這只是傳統的Unixwait()
系統調用返回的16位狀態字(或者看起來像它)。因此,子進程的出口值確實爲($? >> 8)
和$? & 127
給出哪個信號(如果有的話)進程死亡,並且$? & 128
報告是否存在覈心轉儲。
進一步信息可以從文檔中收集到的perldoc -f 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;
}
雖然沒有什麼不對,詢問甚至#2基本的問題,如果你真的想成爲一個capab程序員,你需要養成自己閱讀文檔的習慣,並開發自己理解的能力。
否則,您將浪費寶貴的時間來解決問題,而不是等待他人閱讀文檔。
如果您選擇永不花費任何努力來理解文檔,它確實不會影響我們其他人,但從長遠來看,它會傷害您。
的use English;
名稱爲$?
是$CHILD_ERROR
。包括可能的信號號碼在內的小孩的退出狀態。請參閱perldoc perlvar
。
$?是子進程的錯誤代碼(perform_task.sh)。
在腳本的情況下,返回代碼轉移八位與0 比較合適的,結果這意味着在運行時只考慮如果返回代碼是失敗>於255
多數民衆贊成在精彩!現在我明白它實際上是什麼意思在代碼..感謝精心的答案.. – 2012-07-12 12:27:38
位移的原因是'$?'包含由POSIX的'wait()'函數返回的完整的16位狀態,它包括進程的返回代碼和信號編號(如果有的話)會殺死它。如果返回碼不爲零,則測試失敗。 – friedo 2012-07-12 12:30:08
http://perldoc.perl.org/perlvar.html – Mat 2012-07-12 12:19:57