我有一个基本功能,用于在 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 > package0.pm > package1.pm > package2.pm。每个文件都必须设置下一个文件的详细标志,以便每个文件都能正常工作。
我现在认为这是一个不优雅的解决方案,因为重复的代码以及每个“父文件”都需要设置每个子文件的详细级别。我希望每个 *.pm 文件从 entry.pl 继承详细级别和功能。
是否有我可以遵循的设计模式来跨包共享详细功能?是否有一个模块已经可以做到这一点?