這個問題實際上來自使用線程。我們知道在perl線程中,我們有一個叫lock的函數,根據cpan http://perldoc.perl.org/threads/shared.html:lock將一個顧問鎖放在變量上,直到鎖超出範圍。好吧,如果我們寫這樣的東西:當「if」寫在perl的行尾時,它的範圍是什麼
1 sub foo{
2 lock($obj) if threads::shared::is_shared($obj); #equivalent to if(threads::shared::is_shared($obj)) {lock($obj);} ?
3 ... rest of the code
4 ... more code
5 }
所以鎖的範圍是從第2行到第4行或只是第2行?如果「if」語句添加到它的塊,然後鎖定($ OBJ)也許只是2號線,看到我#comments
的問題實際上是回答,但我想補充一些發現:
我發現不管你怎麼寫兩種:
lock($ojb) if threads::shared::is_shared($obj);
或
if (threads::shared::is_shared($obj)) {
lock($ojb);
}
鎖的範圍是相同的 - 整個foo()子例程。
嗨如果它相當於if(threads :: shared :: is_shared($ obj)){lock($ obj);}那麼範圍在if中。 – 2013-02-23 20:43:22
我明白你在問什麼:)看起來像鮑羅丁回答你的問題。 – Andomar 2013-02-23 20:46:20
@Andomar:我想你錯過了這一點。 OP想要知道'if'語句修飾符是否像'if(CONDITION)BLOCK'語句一樣限制了鎖的範圍。 – Borodin 2013-02-23 20:48:15