我正在创建几个Perl模块,它们将使用常用实用程序来打开和关闭文件.
例如,
mod1.pm
my $in, $out;
sub openf {
my $fname = shift;
open $in, "<", $fname or die $!;
}
sub one {
openf($path);
...
}
Run Code Online (Sandbox Code Playgroud)
mod2.pm
my $in, $out;
sub openf {
my $fname = shift;
open $in, "<", $fname or die $!;
}
sub two {
openf($path);
...
}
Run Code Online (Sandbox Code Playgroud)
现在,我应该放在哪里,openf以便代码不重复?
我会说最简单的解决方案.
创建第3个模块,Common.pm或Helpers.pm或MyUtils.pm - 存储所有常见的样板辅助子程序.
然后,您将从上面的两个模块以及其他任何模块中导入它.
稍微不同的方法是 - 而不是简单地使用useCommmon.pm - 来实际继承它的所有模块.这样他们就可以按照OO方式扩展常用的工具.
我们实际上是通过一个大型项目来实现的,从BaseClass.pm或BaseClassPlus.pm这个子类中对几乎100%的模块进行子类化.工作得很好,并且由于极少的样板,因此对于维护良好的代码非常有利.(我觉得我们可以用Moose完成大部分工作,但那是在我知道Moose存在之前)