perl – 当在另一个包中调用它们时,如何最好地覆盖/包装像sysrea
发布时间:2020-12-16 06:14:23 所属栏目:大数据 来源:网络整理
导读:我正在研究用Perl编写的相当复杂的应用程序.我对这门语言很有经验,但我对此很难过. 我正在使用一个模块Foo,它使用sysread和syswrite对文件句柄(在这种情况下为双向套接字)进行各种操作,然后传递给它的构造函数. 我想执行以下操作:从我正在编写的另一个模块(
我正在研究用Perl编写的相当复杂的应用程序.我对这门语言很有经验,但我对此很难过.
我正在使用一个模块Foo,它使用sysread和syswrite对文件句柄(在这种情况下为双向套接字)进行各种操作,然后传递给它的构造函数. 我想执行以下操作:从我正在编写的另一个模块(让我们称之为Bar),我想改变sysread / write的行为方式,只有在属于Foo的方法中调用时才会这样做 Sysread等人需要在其他地方正常工作.可以安全地假设sysread的使用在Foo中不会改变. 我想这样做的原因是我需要跟踪从上述文件句柄读取/写入的字节数.在这一点上,这似乎是我获取此信息的唯一方法 – 基本上保存了sysread / write的返回值. 使用CPAN中的任何东西都没有问题,只要它的质量很好. 更新:我找到了一个更好的解决方案来解决我的具体问题,并在此处发布了代码: https://github.com/Hercynium/Tie-Handle-CountChars 它似乎在我的应用程序中运行得很好,但是在我对它进行更全面的测试之前我不会将它发布到CPAN,还要写一些实际的单元测试:) 解决方法
您可以通过创建自己的Foo :: sysread函数来完成此操作,该函数通过记录返回值来包装核心函数.使用
Class::Method::Modifiers可以自动完成包装(防止您自己弄乱符号表):
package Foo; use strict; use warnings; # ... other code... use Class::Method::Modifiers; around sysread => sub { my $orig = shift; my $return = CORE::sysread(@_); # do something with $return return $return; }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |