我有一个非常有趣的困境。我正在开发 CVS 存储库的 Perl 脚本接口,并创建了 Perl 对象来表示Modules
、Paths
和Files
. 由于Modules
、Paths
和Files
都可以对它们发出 CVS 命令,因此我设置了AUTOLOAD
例程以采用任何未识别的方法并在对象上发出它们,就好像它们是 CVS 命令一样。
所有这些 CVS 命令都以完全相同的方式执行,但其中一些需要对输出进行特殊处理才能获得我想要的结果。
例如,我想从 diff 命令获取输出并在返回之前重新格式化它。
我正在使用Moose
,因此通常可以按如下方式完成此特殊处理:
after 'diff' => sub {
# Reformat output here
}
问题是……我从来没有明确地创建过这个diff
方法,因为它是由 Perl 生成的,AUTOLOAD
而且 Perl 不会让我为它创建一个方法修饰符,因为它在技术上不存在!
有没有办法让它按我想要的方式工作?