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