【问题标题】:perl automatic module loading like in phpperl 自动加载模块,就像在 php 中一样
【发布时间】:2012-09-07 12:17:39
【问题描述】:

我正在用 Perl 创建一个更大的应用程序,我想知道类似于 php 的类自动加载是否可以在 Perl 中完成?

我检查了捕获异常和 $SIG{__DIE__} 重新定义等,但这似乎不是解决方案,因为它会在第一次“无法通过包找到新方法”时停止,然后再次加载我应该再次加载的每个模块调用整个程序。

一种解决方案可能是扫描我的库中的所有文件并在运行时将其提供给@INC,但我不知道这是否是一个好的解决方案——可能不是。

有人有什么建议吗?

【问题讨论】:

    标签: perl module autoload


    【解决方案1】:

    好吧,您可能想阅读以下内容:

    不过,这些都与 PHP 的方法完全不同。

    但是,列出所有“正常”依赖项确实是最佳实践。这使得构建安装程序/部署到 CPAN 等变得更加容易。还有许多其他模块处理加载插件,在运行时你真的不知道要加载什么。

    找出你的依赖是否有一些困难,或者你只是想避免在每个文件的顶部使用一堆“使用”语句?

    【讨论】:

    • 嗨,是的,我已经看到了 autoloader 和 autouse,延迟加载对性能有好处,是的,我的目标是避免一大堆使用语句,但我必须承认,有时对有一个这样列出的依赖项列表
    • 在那种情况下,我会说只是习惯使用“使用”。其他任何查看您的代码的人都会期待它。不过,您可以将模块捆绑到一个公共集合中 - 请参阅工具包的 metacpan、Exporter::Cluster 或查看 perl5i 中 load_in_caller() 的源代码
    • 我只是好奇,我不能从外面使用任何东西,因为我在公司环境中......但感谢您的建议:)
    • 您仍然可以从 load_in_caller 剪切和粘贴源代码。或者只是阅读它并受到“启发”来编写自己的:-)
    • 如果我没看错你的目标,你也可以在使用模块之前require。这会让你延迟加载。您不会导出任何符号,但在这种情况下您似乎不需要它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2011-12-27
    相关资源
    最近更新 更多