在Perl中使用自调用匿名函数是一个好习惯吗?

 河南的小人物 发布于 2023-02-13 18:55

在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的答案,了解与自我调用匿名潜艇相关的资源相关优势.

1 个回答
  • 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的答案,了解与自我调用匿名潜艇相关的资源相关优势.

    2023-02-13 18:57 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有