perl - 等同于 2 个子程序的最佳方法?

标签 perl

我有很多模块,每个模块都有子 insert_info 和子 update_info 方法。有时,sub update_info 和 sub insert_info 是相同的。但我不想在发生这种情况时只使用其中一种方法,因为通常它们是不一样的。那么如何使这两种方法相等呢?

这是唯一的方法吗?

 sub insert_info {
 # code......
 }

 sub update_info { insert_info(); }

最佳答案

别名通过 typeglob

*update_info = \&insert_info;

添加BEGIN可以避免问题

BEGIN { *update_info = \&insert_info; }

这有助于确保它在可能调用它的其他事物之前运行。


对您的示例的评论

此外,您的 sub update_info { insert_info(); 不是副本,因为它总是调用不带参数的 insert_info。如果您向 update_info 传递了任何值(例如 update_info('someval')),它们将不会传递给 insert_info。此外,它们都是声明和定义的子例程 - 都占用内存。

如果您想按照您的方式声明它并自动将参数传递给内部函数,您可以执行 sub update_info { insert_info(@_); },或者更好的是 sub update_info { &insert_info },因为 & 没有任何参数列表,将自动传递 @_ .

这些仍然比使用顶部列出的 typeglob 分配占用更多内存。

关于perl - 等同于 2 个子程序的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18009051/

相关文章:

php - 是否有一种工具可以逐行调试 PHP 应用程序?就像它是如何在 perl 或 .net 中完成的?

perl - 使用 Perl 比较两个远程文件

arrays - 距数组的编辑距离百分比

Perl tar 文件递归创建目录

perl - 在 mksmksmks.pl 第 63 行的串联 (.) 或字符串中使用未初始化的值

algorithm - 如何在不计算所有其他项目的情况下从笛卡尔积中选择特定项目

perl - use 和 require 的区别(我列出了区别,需要知道还有什么)

perl - 异常 : Failed to solve dependencies: 1:perl-JSON-XS-2. 27-2.el6.x86_64 需要 perl(:MODULE_COMPAT_5. 10.1)

perl - 'uninitialized value' 警告的解释

string - Perl:返回字符串的最高匹配百分比