Rechercher une page de manuel
UNIVERSAL::ref.3pm
Langue: en
Version: 2007-11-20 (fedora - 01/12/10)
Section: 3 (Bibliothèques de fonctions)
NAME
UNIVERSAL::ref - Turns ref() into a multimethodSYNOPSIS
# True! Wrapper pretends to be Thing. ref( Wrapper->new( Thing->new ) ) eq ref( Thing->new ); package Thing; sub new { bless [], shift } package Wrapper; sub new { my ($class,$proxy) = @_; bless \ $proxy, $class; } sub ref { my $self = shift @_; return $$self; }
DESCRIPTION
This module changes the behavior of the builtin function ref(). If ref() is called on an object that has requested an overloaded ref, the object's "->ref" method will be called and its return value used instead.USING
To enable this feature for a class, "use UNIVERSAL::ref" in your class. Here is a sample proxy module.package Pirate; # Pirate pretends to be a Privateer use UNIVERSAL::ref; sub new { bless {}, shift } sub ref { return 'Privateer' }
Anywhere you call "ref($obj)" on a "Pirate" object, it will allow "Pirate" to lie and pretend to be something else.
TODO
Currently UNIVERSAL::ref must be installed before any ref() calls that are to be affected.I think ref() always occurs in an implicit scalar context. There is no accomodation for list context.
UNIVERSAL::ref probably shouldn't allow a module to lie to itself. Or should it?
ACKNOWLEDGEMENTS
ambrus for the excellent idea to overload defined() to allow Perl 5 to have Perl 6's ``interesting values of undef.''chromatic for pointing out how utterly broken ref() is. This fix covers its biggest hole.
AUTHOR
Joshua ben Jore - jjore@cpan.orgLICENSE
The standard Artistic / GPL license most other perl code is typically using.Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre