我有很多模块,每个模块都有子 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/