我有一个基本功能,用于在perl包中打印详细级别的消息:
# 0 = no output, 1 = debug output
our $verbosity = 0;
sub msg {
(my $verbLevel, my $format, my @addArgs) = @_;
if ($verbLevel <= $verbosity) {
printf($format, @addArgs);
}
}
这是IMO在包内的优雅解决方案,因为要打印调试消息,我可以简单地做:
msg(1, "Some debug message");
然而,在实践中,这个包在长链包中被“使用”,每个包也使用详细程度特征。让我们说使用链是这样的:entry.pl&gt; package0.pm&gt; package1.pm&gt; package2.pm。每个文件必须设置下一个文件的详细标记,以使每个文件正常工作。
我现在认为这是一个不优雅的解决方案,因为重复的代码和每个“父文件”的要求设置它的每个孩子的详细程度。我希望发生的是每个* .pm文件从entry.pl继承详细级别和函数。
我是否可以遵循设计模式来跨包共享详细功能?那里有一个可以做到这一点的模块吗?
答案 0 :(得分:2)
或许看一下Log :: Log4Perl - 作为一个模型,可以用于您自己的实现,也可以作为潜在的替代品。