GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages


Manual Reference Pages  -  UNIVERSAL::REF (3)

.ds Aq ’

NAME

UNIVERSAL::ref - Turns ref() into a multimethod

CONTENTS

SYNOPSIS



  # 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.

METHODS

import A pragma for ref()-enabling your class. This adds the calling class name to a global list of ref()-enabled classes.



    package YourClass;
    use UNIVERSAL::ref;
    sub ref { ... }



unimport A pragma for ref()-disabling your class. This removes the calling class name from a global list of ref()-enabled classes.

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.org

LICENSE

The standard Artistic / GPL license most other perl code is typically using.
Search for    or go to Top of page |  Section 3 |  Main Index


perl v5.20.3 UNIVERSAL::REF (3) 2011-01-23

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.