Я работаю над небольшим DSL, который использует резервную копию nomethod
для перегрузки для захвата операторов, используемых для перегруженных значений. Это похоже на функцию символического калькулятора , описанного в документации overload
.
Это отлично подходит для стандартных операторов сравнения, но учтите следующее:
my $ret = $overloaded =~ /regex/;
В этом случае nomethod
вызывается для строки $overloaded
, после чего перегрузка теряется. Я думал о возврате привязанной переменной, которая, по крайней мере, позволит мне переносить оригинальный перегруженный объект, но это все равно будет потеряно во время выполнения регулярного выражения.
Итак, конечный вопрос заключается в том, есть ли способ расширить идею overload
символического калькулятора, чтобы включить операторы привязки regex =~
и !~
, чтобы приведенный выше пример кода вызывал nomethod
с ($overloaded, qr/regex/, 0, '=~')
или что-то подобное?
Я также кратко рассмотрел перегрузку оператора smartmatch ~~
, но это тоже не показалось трюком (всегда по умолчанию используется соответствие регулярному выражению, а не перегрузка).
Изменить: я просмотрел еще ~~
и обнаружил, что my $ret = $overloaded ~~ q/regex/
работает из-за правил smartmatching. Закрыть, но не идеальное решение, и я бы хотел, чтобы он работал до 5.10, поэтому я приветствую другие ответы.