Sobrecarga y Contexto Numérico

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:

A menos que el pseudooperador 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
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19