当"if"写在perl的行尾时,它的范围是什么

Pei*_* Li 4 perl multithreading locking

这个问题实际上来自于使用线程.我们知道在perl线程中,我们有一个名为lock的函数,根据cpan http://perldoc.perl.org/threads/shared.html:lock在变量上放置一个建议锁定,直到锁定超出范围.好吧,如果我们写这样的东西怎么办:

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 }
Run Code Online (Sandbox Code Playgroud)

所以锁的范围是从第2行到第4行还是第2行?如果"if"语句向其添加一个块,那么lock($ obj)可能只是第2行,请参阅我的#comments


问题实际上得到了回答,但我想补充一些发现:

我发现无论你怎么写:

lock($ojb) if threads::shared::is_shared($obj);
Run Code Online (Sandbox Code Playgroud)

要么

if (threads::shared::is_shared($obj)) {
   lock($ojb);
}
Run Code Online (Sandbox Code Playgroud)

锁的范围是相同的 - 整个foo()子例程.

Bor*_*din 7

if语句修饰把一个隐含的块围绕它适用于声明.因此,锁定的范围(如果应用)是整个子程序的其余部分.