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
UNIVERSAL::ref(3) User Contributed Perl Documentation UNIVERSAL::ref(3)

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

  # 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;
  }

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.

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.

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.

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?

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.

Joshua ben Jore - jjore@cpan.org

The standard Artistic / GPL license most other perl code is typically using.
2011-01-23 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

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