我试图解决一个有错误的包中添加软件包别名,而无需修改源:如何通过猴子修补
- 在
Treex::PML::Schema::Container.pm
长的子程序,包含两个不存在的包Treex::PML::FSFactory
。它应该是Treex::PML::Factory
。 - 有问题的子程序太长以至于无法从另一个文件复制和修补,所以我想猴子补丁
Treex::PML
,以便它提供Treex::PML::FSFactory
作为Treex::PML::Factory
的别名。
在我的主程序我尝试以下(基于this recipe),但它似乎没有任何效果:
use Treex::PML;
package Treex::PML;
use Package::Alias FSFactory => 'Treex::PML::Factory';
package MyPackage;
...
我怎样才能得到Treex::PML::FSFactory
春天开始存在,在这样的一种可以被Treex::PML::Schema::Container
看到的方式?
编辑:这个特殊的错误在我的错误报告的几个小时内得到修复!但是,无论如何知道如何使用别名都很有用。尽管我通过子类化解决了我的问题,但正如接受的答案所建议的那样,我已经添加了一个自我回答,显示如何使用别名完成它。
你为什么不提交错误报告?我怀疑作者是社区活跃成员@choroba。 – ikegami
我也会这样做,谢谢。 CTAN告诉我,作者是Petr Pajas,他最近与我联系了相关的isssues(我正在摔跤的应用程序) - 没有回应。但我现在看到,谷歌已经把我送到PML的旧版本。 @choroba已经接管了。 – alexis
如果您在*使用Treex :: PML之前执行此操作,您的初始尝试是否有效? – ysth