在工作中,我們在與對象的析構函數中的子進程交互時遇到錯誤,並最終將其跟蹤到$?變量在等待呼叫期間被覆蓋。這發生在調用exit()之後,所以$?另外意味着我們的程序返回到操作系統的代碼。
具體來說,的perldoc談到這種錯誤的:
Inside an END subroutine $? contains the value that is going to be given to exit(). You can modify $? in an END subroutine to change the exit status of your program.
我們不希望這樣的事情發生,所以我們把一個local $?=$?;
每END塊內。但是現在這些程序將成功轉交給操作系統,而實際上他們的任務失敗了。
我設法把它分解成兩個示例程序。一個按預期工作,一個失敗。這發生在兩個v5.8.8和v5.10.1爲x86_64的Linux的線程多
方案A:(返回0到操作系統)
END{ local $?=$?; }
exit(100);
方案B:(100返回到操作系統)
END{ local $?=$?>>8; }
exit(100);
事爲什麼它什麼價值被分配到終端模塊的local $?
?
是的,這似乎不正確。 5.16.1也是這樣的 – ikegami 2013-02-21 03:49:48