在JavaScript中使用自调用匿名函数来扩展变量等是一种常见做法:
;(function() { ... })();
在Perl中使用这些函数是一个好习惯吗?
(sub { ... })->();
或者出于某种原因使用主子程序更好?
sub main { ... } main();
Vector Gorgo.. 6
Perl有JS缺乏的词法范围机制.你最好简单地将你想要作用域的代码封装在一个块中,例如:
{ my $localvar; . . . }
在这种情况下,$localvar
在那些牙箍之外将是完全不可见的; 这也是可用于本地化内置变量的相同机制,例如$/
:
{ local $/ = undef; #reading from a file handle now consumes the entire file } #But not out here
(旁注:永远不要$/
全局设置.如果你在完成后忘记将其设置回来,或者在恢复之前调用其他代码,它会以微妙和可怕的方式破坏事物.)
在perl中,最好的做法是在有意义的时候将东西放入子中; 当它没有意义或不必要地使代码复杂化时,词汇块确保范围; 如果你确实需要匿名子程序(通常用于回调或类似),那么你可以做my $subref = sub { . . . };
甚至只是将子声明直接粘贴到函数参数中:do_something(callback => sub { . . . });
注意:另请参阅ysth的答案,了解与自我调用匿名潜艇相关的资源相关优势.
Perl有JS缺乏的词法范围机制.你最好简单地将你想要作用域的代码封装在一个块中,例如:
{ my $localvar; . . . }
在这种情况下,$localvar
在那些牙箍之外将是完全不可见的; 这也是可用于本地化内置变量的相同机制,例如$/
:
{ local $/ = undef; #reading from a file handle now consumes the entire file } #But not out here
(旁注:永远不要$/
全局设置.如果你在完成后忘记将其设置回来,或者在恢复之前调用其他代码,它会以微妙和可怕的方式破坏事物.)
在perl中,最好的做法是在有意义的时候将东西放入子中; 当它没有意义或不必要地使代码复杂化时,词汇块确保范围; 如果你确实需要匿名子程序(通常用于回调或类似),那么你可以做my $subref = sub { . . . };
甚至只是将子声明直接粘贴到函数参数中:do_something(callback => sub { . . . });
注意:另请参阅ysth的答案,了解与自我调用匿名潜艇相关的资源相关优势.