1你考虑过使用autobox吗?一个非常简单的包含基本AUTOLOAD例程的软件包就足够了。你不需要新的运算符,只需将所有可能的方法添加到undef中即可。这可能会对性能产生可怕的影响。像这样:use autobox UNDEF => 'SilentUndef'; … your code… package SilentUndef; sub AUTOLOAD {sub{}}。 - Patrick J. S.
@polettix 看起来正是我需要的。我想使用 B::Hooks::OP::Check 并钩住自定义操作符 OP 是开始的地方。我将无法在一个月左右测试这个理论。 - LLFourn
显示剩余3条评论
1个回答
1
1
我不相信你可以添加中缀运算符(其操作数在运算符之前和之后),更不用说符号运算符(与命名运算符相对)了,但是您可以编写一个操作符检查器来替换方法调用。这意味着您可以使->foo的行为不同。通过将您的模块编写为pragma,您可以将您的模块的影响限制在词法作用域内(例如{ use mypragma; ...})。
if( $dom->at('div')->at('h1')) {
,但由于div
不存在而导致出现“无法调用未定义”的错误,这让我感到非常烦恼,于是我想到了一个解决方法。 - LLFournautobox
吗?一个非常简单的包含基本AUTOLOAD
例程的软件包就足够了。你不需要新的运算符,只需将所有可能的方法添加到undef
中即可。这可能会对性能产生可怕的影响。像这样:use autobox UNDEF => 'SilentUndef'; … your code… package SilentUndef; sub AUTOLOAD {sub{}}
。 - Patrick J. S.