2013-02-23 67 views

回答

6

last經由或next退出子程序根據perldoc禁止(和通常觸發警告)。這是因爲它非常混亂 - Perl需要動態搜索範圍以查找要跳過的塊,並調用各種函數的返回值(但應使用什麼返回值?)。 return通常更安全。

在信號處理上下文中,這很麻煩,因爲Perl實際上必須暫停執行腳本以執行信號處理程序。所以它現在運行兩個獨立的執行上下文,而信號處理器上下文不能直接影響主要上下文的控制流,這就是爲什麼你會得到這個錯誤。

有兩件事情可以做:

  • 拋出異常(使用die),並抓住它的外塊。這是不可取的,因爲它可能會中斷任何事情。
  • 設置在信號處理程序外定義的全局標誌,例如($caught_signal = 1),並在方便的地方檢查內部代碼中的內容。
+0

扔'死'不僅是不受歡迎的,這是正常的事情。信號不會中斷「幾乎任何事情」。由於它們僅在Perl操作符之間進行檢查,因此不會在系統調用,庫調用或Perl操作中死掉。 – ikegami 2013-02-24 08:22:55

+0

我同意,但它仍然不如檢查代碼中明確定義的點。 – rjh 2013-02-24 10:46:51