Class::AutoloadCAN

Class::AutoloadCAN is a Perl module to make AUTOLOAD, can and inheritance cooperate.
Download

Class::AutoloadCAN Ranking & Summary

Advertisement

  • Rating:
  • License:
  • Perl Artistic License
  • Price:
  • FREE
  • Publisher Name:
  • Ben Tilly
  • Publisher web site:
  • http://search.cpan.org/~tilly/Text-xSV-0.16/lib/Text/xSV.pm

Class::AutoloadCAN Tags


Class::AutoloadCAN Description

Class::AutoloadCAN is a Perl module to make AUTOLOAD, can and inheritance cooperate. Class::AutoloadCAN is a Perl module to make AUTOLOAD, can and inheritance cooperate.SYNOPSIS package Foo; use Class::AutoloadCAN; sub CAN { my ($starting_class, $method, $self, @arguments) = @_; return sub { my $self = shift; print join ", ", $method, @_; print "n"; }; } # And this prints the famous greeting. Foo->hello("world");This module solves a fundamental conflict between AUTOLOAD, can and inheritance. The problem is that while you can implement anything in AUTOLOAD, UNIVERSAL::can is not aware that it is there. Attempting to modify UNIVERSAL::can to document those methods is very hard. And if a parent class uses AUTOLOAD then subclasses have to do a lot of work to make their AUTOLOADs cooperate with the parent one. It is harder still if 2 parent classes in a multiple inheritance tree wish to cooperate with each other. Few try to do this, which may be good since those who try usually get it wrong. See http://www.perlmonks.org/?node_id=342804 for a fuller discussion.With this module instead of writing AUTOLOADs, you write CANs. Based on what they return, Class::AutoloadCAN will decide whether you handle the call or it needs to search higher up the inheritance chain.Here are the methods and functions that matter for the operation of this module.AUTOLOADAn AUTOLOAD will be installed in every package that uses this module. You can choose to have it installed in other packages. If you write your own AUTOLOADs, you can easily break this module. So don't do that. Write CANs instead.canUNIVERSAL::can will be modified to be aware of the functions provided dynamically through this module. You are free to override can in any subclass and this module will not interfere. I have no idea why you would want to, though. CANIf there is a method named CAN in a class that inherits from one that Universal::AutoloadCAN was installed to, it may be called in deciding how a method is implemented. It will be passed the class that the method search started in, the method name, the object called, and the arguments to the function. It is expected to do nothing but return a subroutine reference if it implements that method on that object, or undef otherwise.If that subroutine is actually called, it will be passed all of the usual arguments that a method call gets, and the AUTOLOAD that found it will erase itself from the callstack.Class::AutoloadCAN::importIf the import method for Class::AutoloadCAN is called with no arguments it installs an AUTOLOAD in the calling class. If it is called with arguments, it installs an AUTOLOAD in those classes as well. Use with caution: this is a convenience feature that is not expected to be used very often. Requirements: · Perl


Class::AutoloadCAN Related Software