我正在开发一个小型DSL,使用nomethod
回退机制来实现重载,并捕获用于重载值的运算符。这类似于overload
文档中描述的符号计算器的功能。
这对于标准比较运算符很有效,但考虑以下情况:
my $ret = $overloaded =~ /regex/;
在这种情况下,nomethod
被调用以将$overloaded
转换为字符串,在此之后,重载会丢失。我考虑返回一个绑定的变量,这样至少可以带着原始的重载对象,但在执行正则表达式期间仍将丢失。
所以,最终问题是是否有任何方法可以扩展overload
对符号计算器的理解,以包括正则表达式绑定运算符=~
和!〜
,这样上述代码示例将使用 nomethod
和类似于($overloaded,qr / regex /,0,'=〜')
进行调用?我还简要研究了智能匹配运算符
~~
,但那似乎也行不通(始终使用默认的正则表达式匹配而不是重载)。编辑:我更深入地研究了
~~
,并发现my $ret = $overloaded ~~ q/regex/
由于智能匹配规则而起作用。接近,但不是理想的解决方案,我希望它适用于5.10之前的版本,因此欢迎其他答案。
$overloaded == qr/.../
与$overloaded =~ /.../
表现出相同的行为。至少在 5.10 之前这将起作用... - Eric Strom