I am working on a small DSL that uses the nomethod
fallback for overloading to capture the operators used on the overloaded values. This is similar to the function of the symbolic calculator described in overload
's documentation.
This works fine for the standard comparison operators, but consider the following:
my $ret = $overloaded =~ /regex/;
In this case, nomethod
gets called to stringify $overloaded
, and after that the overloading is lost. I thought about returning a tied variable, which will at least let me carry around the original overloaded object, but that will still get lost during the execution of the regex.
So, the ultimate question is if there is any way to extend overload
's idea of a symbolic calculator to include the regex binding operators =~
and !~
, so that the above code sample would call nomethod
with ($overloaded, qr/regex/, 0, '=~')
or something similar?
I also briefly looked into overloading the smartmatch operator ~~
but that didn't seem to do the trick either (always defaults to regex matching rather than overloading).
Edit: I looked into ~~
more, and found that my $ret = $overloaded ~~ q/regex/
works due to smartmatching rules. Close, but not an ideal solution, and I would like it to work pre 5.10, so I welcome other answers.