如何在我的 Perl 代码中创建一个事件处理程序来拦截所有基于文件/目录/系统的调用,以便我可以及时处理输入。
我的脚本中有很多 IO 访问权限,并且我发现添加手动代码以消除污染很麻烦。
这可以在不需要安装第三方 CPAN 模块的情况下完成吗?
如何在我的 Perl 代码中创建一个事件处理程序来拦截所有基于文件/目录/系统的调用,以便我可以及时处理输入。
我的脚本中有很多 IO 访问权限,并且我发现添加手动代码以消除污染很麻烦。
这可以在不需要安装第三方 CPAN 模块的情况下完成吗?
您可以尝试采用面向方面的方法,但它确实需要安装 CPAN 模块Aspect。
要捕获对特定方法/函数的调用,您需要定义一个切入点(取自 Aspect POD):
$pointcut = call qr/^Person::[gs]et_/; # defines a collection of events
然后定义调用前要使用的代码:
$before = before {
print "g/set will soon be called";
} $pointcut;
虽然我不确定 Aspect 模块是否允许您捕获对 CORE::* 命名空间的调用。
如何期望不污染一般数据?如果你只是盲目地接受一切,不管它的来源,那么使用污点检查是没有意义的。
您可能想阅读Mastering Perl中的“安全编程技术”一章。对于处理这类事情,我给出了很多建议。但是,任何好的建议都将针对特定情况,而不是一概而论。