Modificando el Acceso a la Estructura

sub subtract {
  my ($left, $r, $rev) = @_;
  my $class = ref $left;

  if (ref $r) {
    if (UNIVERSAL::isa($r, __PACKAGE__)) {
      return $class->new($left->num * $r->den - $r->num * $left->den,
			   $r->den * $left->den);
    } else {
      croak "Can't subtract a ", $class, " from a ", ref $r;
    }
  } else {
    if ($r =~ /^[-+]?\d+$/) {
      $r = $class->new($r, 1);
      return $rev ? $r - $left : $left - $r;
    } else {
      return $rev ? $r - $left->to_num : $left->to_num - $r;
    }
  }
}
Véanse

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