这个问题实际上来自使用线程。我们知道在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