У меня есть идея для Perl, и я пытаюсь найти наилучший способ ее реализации.
Идея состоит в том, чтобы иметь новые версии каждого оператора, которые рассматривают неопределенное значение как идентификатор этой операции. Например:
$a = undef + 5; # undef treated as 0, so $a = 5
$a = undef . "foo"; # undef treated as '', so $a = foo
$a = undef && 1; # undef treated as false, $a = true
и пр.
в идеале, это было бы в языке как прагма или что-то в этом роде.
use operators::awesome;
Однако я был бы удовлетворен, если бы мог сам реализовать эту специальную логику, а затем вызывать ее при необходимости:
use My::Operators;
Проблема заключается в том, что если я скажу «использовать перегрузку» внутри My :: Operators, то затрагивает только объекты, благословленные в My :: Operators.
Таким образом, вопрос заключается в следующем: есть ли способ (с использованием «overoad» или иным образом) сделать «перегрузку универсального оператора» - которая будет вызываться для всех операций, а не только для операций с благословенными скалярами.
Если нет - кто думает, что это будет отличной идеей !? Это спасло бы мне тонну такого вида кода
if($object && $object{value} && $object{value} == 15)
replace with
if($object{value} == 15) ## the special "is-equal-to" operator