1UNIVERSAL::ref(3)     User Contributed Perl Documentation    UNIVERSAL::ref(3)
2
3
4

NAME

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

SYNOPSIS

9         # True! Wrapper pretends to be Thing.
10         ref( Wrapper->new( Thing->new ) )
11           eq ref( Thing->new );
12
13         package Thing;
14         sub new { bless [], shift }
15
16         package Wrapper;
17         sub new {
18             my ($class,$proxy) = @_;
19             bless \ $proxy, $class;
20         }
21         sub ref {
22             my $self = shift @_;
23             return $$self;
24         }
25

DESCRIPTION

27       This module changes the behavior of the builtin function ref(). If
28       ref() is called on an object that has requested an overloaded ref, the
29       object's "->ref" method will be called and its return value used
30       instead.
31

USING

33       To enable this feature for a class, "use UNIVERSAL::ref" in your class.
34       Here is a sample proxy module.
35
36         package Pirate;
37         # Pirate pretends to be a Privateer
38         use UNIVERSAL::ref;
39         sub new { bless {}, shift }
40         sub ref { return 'Privateer' }
41
42       Anywhere you call "ref($obj)" on a "Pirate" object, it will allow
43       "Pirate" to lie and pretend to be something else.
44

METHODS

46       import
47           A pragma for ref()-enabling your class. This adds the calling class
48           name to a global list of ref()-enabled classes.
49
50               package YourClass;
51               use UNIVERSAL::ref;
52               sub ref { ... }
53
54       unimport
55           A pragma for ref()-disabling your class. This removes the calling
56           class name from a global list of ref()-enabled classes.
57

TODO

59       Currently UNIVERSAL::ref must be installed before any ref() calls that
60       are to be affected.
61
62       I think ref() always occurs in an implicit scalar context. There is no
63       accomodation for list context.
64
65       UNIVERSAL::ref probably shouldn't allow a module to lie to itself. Or
66       should it?
67

ACKNOWLEDGEMENTS

69       ambrus for the excellent idea to overload defined() to allow Perl 5 to
70       have Perl 6's "interesting values of undef."
71
72       chromatic for pointing out how utterly broken ref() is. This fix covers
73       its biggest hole.
74

AUTHOR

76       Joshua ben Jore - jjore@cpan.org
77

LICENSE

79       The standard Artistic / GPL license most other perl code is typically
80       using.
81
82
83
84perl v5.34.0                      2022-01-21                 UNIVERSAL::ref(3)
Impressum