Análogamente se puede controlar el modo en que Perl realiza las conversiones
en aquellos contextos en los que requiere un número. El operador
encargado de ello es O+:
package DaysOfTheWeek;
...
my @_day_name = qw(Sun Mon Tue Wed Thu Fri Sat)
use overload
q("") => sub { $_day_name[$_[0]->val] };
"O+" => sub { $_[0]->{val} };
Asi la subrutina asociada con O+ será invocada dondequiera
que el objeto sea usado y Perl espere que aparezca un valor numérico:
print "*" x $day
imprimirá 3 asteriscos puesto que se supone que el segundo operador de x es un entero.
Otra cosa ocurriría si el operador x estuviera ya sobrecargado, en cuyo caso
se usaría la correspondiente subrutina asociada. Otros contextos en los
que se espera un valor numérico son:
..)
fallback este definido a cierto,
los operandos de una operación aritmética no sobrecargada no implican un contexto
numérico. Así la expresión $day+1 no conlleva una conversión de $day
a numérico.
Casiano Rodríguez León
