Sobrecarga de Operadores Lógicos

El operador de sobrecarga bool se encarga de la conversión a valores lógicos. La correspondiente subrutina será invocada en cualquier contexto en el que aparezca el objeto de la clase y Perl espere un valor lógico.

Por ejemplo en el módulo Set::Scalar::Base debido a Jarkko Hietaniemi y que proporciona acceso al álgebra de conjuntos vemos la siguiente declaración:

use overload
    '+'   => \&_union_overload,
    '*'   => \&_intersection_overload,
    '-'   => \&_difference_overload,
    'neg' => \&_complement_overload,
    '%'   => \&_symmetric_difference_overload,
    '/'   => \&_unique_overload,
    'eq'  => \&is_equal,
    '=='  => \&is_equal,
    '!='  => \&is_disjoint,
    '<=>' => \&compare,
    '<'   => \&is_proper_subset,
    '>'   => \&is_proper_superset,
    '<='  => \&is_subset,
    '>='  => \&is_superset,
    'bool'  => \&size;
Obsérvese como el manipulador para bool hace que un conjunto en un contexto lógico devuelva su tamaño (\&size). El siguiente ejemplo que usa Set::Scalar ilustra este punto. Consideremos el programa:
$ cat ./scalar_sets2.pl
#!/usr/local/bin/perl5.8.0 -d
use Set::Scalar;

$A = Set::Scalar->new('a'..'z');

print "$A\n" if $A;
Al ejecutarlo podemos contemplar como se llama a &size para evaluar la condición if $A:
$ ./scalar_sets2.pl
Loading DB routines from perl5db.pl version 1.19
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.

main::(./scalar_sets2.pl:4):    $A = Set::Scalar->new('a'..'z');
  DB<1> n
main::(./scalar_sets2.pl:6):    print "$A\n" if $A;
  DB<1> s
Set::Scalar::Base::size(/usr/local/lib/perl5/site_perl/5.8.0/Set/Scalar/Base.pm:123):
123:        my $self = shift;
El comando T nos permite ver la pila de llamadas:
  DB<1> T
$ = Set::Scalar::Base::size(ref(Set::Scalar), undef, '') called from file `./scalar_sets2.pl' line 6
  DB<1>
Set::Scalar::Base::size(/usr/local/lib/perl5/site_perl/5.8.0/Set/Scalar/Base.pm:125):
125:        return scalar keys %{ $self->{'elements'} };
  DB<1> c
(a b c d e f g h i j k l m n o p q r s t u v w x y z)

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