我正在研究用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;
};