Add built local::lib
[catagits/Gitalist.git] / local-lib5 / man / man3 / MooseX::Clone.3pm
1 .\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.10)
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sp \" Vertical space (when we can't use .PP)
6 .if t .sp .5v
7 .if n .sp
8 ..
9 .de Vb \" Begin verbatim text
10 .ft CW
11 .nf
12 .ne \\$1
13 ..
14 .de Ve \" End verbatim text
15 .ft R
16 .fi
17 ..
18 .\" Set up some character translations and predefined strings.  \*(-- will
19 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
20 .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
21 .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
22 .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
23 .\" nothing in troff, for use with C<>.
24 .tr \(*W-
25 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
26 .ie n \{\
27 .    ds -- \(*W-
28 .    ds PI pi
29 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
30 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
31 .    ds L" ""
32 .    ds R" ""
33 .    ds C` ""
34 .    ds C' ""
35 'br\}
36 .el\{\
37 .    ds -- \|\(em\|
38 .    ds PI \(*p
39 .    ds L" ``
40 .    ds R" ''
41 'br\}
42 .\"
43 .\" Escape single quotes in literal strings from groff's Unicode transform.
44 .ie \n(.g .ds Aq \(aq
45 .el       .ds Aq '
46 .\"
47 .\" If the F register is turned on, we'll generate index entries on stderr for
48 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
49 .\" entries marked with X<> in POD.  Of course, you'll have to process the
50 .\" output yourself in some meaningful fashion.
51 .ie \nF \{\
52 .    de IX
53 .    tm Index:\\$1\t\\n%\t"\\$2"
54 ..
55 .    nr % 0
56 .    rr F
57 .\}
58 .el \{\
59 .    de IX
60 ..
61 .\}
62 .\"
63 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
64 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
65 .    \" fudge factors for nroff and troff
66 .if n \{\
67 .    ds #H 0
68 .    ds #V .8m
69 .    ds #F .3m
70 .    ds #[ \f1
71 .    ds #] \fP
72 .\}
73 .if t \{\
74 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
75 .    ds #V .6m
76 .    ds #F 0
77 .    ds #[ \&
78 .    ds #] \&
79 .\}
80 .    \" simple accents for nroff and troff
81 .if n \{\
82 .    ds ' \&
83 .    ds ` \&
84 .    ds ^ \&
85 .    ds , \&
86 .    ds ~ ~
87 .    ds /
88 .\}
89 .if t \{\
90 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
91 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
92 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
93 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
94 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
95 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
96 .\}
97 .    \" troff and (daisy-wheel) nroff accents
98 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
99 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
100 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
101 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
102 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
103 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
104 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
105 .ds ae a\h'-(\w'a'u*4/10)'e
106 .ds Ae A\h'-(\w'A'u*4/10)'E
107 .    \" corrections for vroff
108 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
109 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
110 .    \" for low resolution devices (crt and lpr)
111 .if \n(.H>23 .if \n(.V>19 \
112 \{\
113 .    ds : e
114 .    ds 8 ss
115 .    ds o a
116 .    ds d- d\h'-1'\(ga
117 .    ds D- D\h'-1'\(hy
118 .    ds th \o'bp'
119 .    ds Th \o'LP'
120 .    ds ae ae
121 .    ds Ae AE
122 .\}
123 .rm #[ #] #H #V #F C
124 .\" ========================================================================
125 .\"
126 .IX Title "MooseX::Clone 3"
127 .TH MooseX::Clone 3 "2010-01-13" "perl v5.8.8" "User Contributed Perl Documentation"
128 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
129 .\" way too many mistakes in technical documents.
130 .if n .ad l
131 .nh
132 .SH "NAME"
133 MooseX::Clone \- Fine grained cloning support for Moose objects.
134 .SH "SYNOPSIS"
135 .IX Header "SYNOPSIS"
136 .Vb 2
137 \&    package Bar;
138 \&    use Moose;
139 \&
140 \&    with qw(MooseX::Clone);
141 \&
142 \&    has foo => (
143 \&        isa => "Foo",
144 \&        traits => [qw(Clone)], # this attribute will be recursively cloned
145 \&    );
146 \&
147 \&    package Foo;
148 \&    use Moose;
149 \&
150 \&    # this API is used/provided by MooseX::Clone
151 \&    sub clone {
152 \&        my ( $self, %params ) = @_;
153 \&
154 \&        # ...
155 \&    }
156 \&
157 \&
158 \&    # used like this:
159 \&
160 \&    my $bar = Bar\->new( foo => Foo\->new );
161 \&
162 \&    my $copy = $bar\->clone( foo => [ qw(Args for Foo::clone) ] );
163 .Ve
164 .SH "DESCRIPTION"
165 .IX Header "DESCRIPTION"
166 Out of the box Moose only provides very barebones cloning support in order
167 to maximize flexibility.
168 .PP
169 This role provides a \f(CW\*(C`clone\*(C'\fR method that makes use of the low level cloning
170 support already in Moose and adds selective deep cloning based on
171 introspection on top of that. Attributes with the \f(CW\*(C`Clone\*(C'\fR trait will handle
172 cloning of data within the object, typically delegating to the attribute
173 value's own \f(CW\*(C`clone\*(C'\fR method.
174 .SH "TRAITS"
175 .IX Header "TRAITS"
176 .IP "Clone" 4
177 .IX Item "Clone"
178 By default Moose objects are cloned like this:
179 .Sp
180 .Vb 1
181 \&    bless { %$old }, ref $old;
182 .Ve
183 .Sp
184 By specifying the Clone trait for certain attributes custom behavior the
185 value's own \f(CW\*(C`clone\*(C'\fR method will be invoked.
186 .Sp
187 By extending this trait you can create custom cloning for certain attributes.
188 .Sp
189 By creating \f(CW\*(C`clone\*(C'\fR methods for your objects (e.g. by composing
190 MooseX::Compile) you can make them interact with this trait.
191 .IP "NoClone" 4
192 .IX Item "NoClone"
193 Specifies attributes that should be skipped entirely while cloning.
194 .SH "METHODS"
195 .IX Header "METHODS"
196 .ie n .IP "clone %params" 4
197 .el .IP "clone \f(CW%params\fR" 4
198 .IX Item "clone %params"
199 Returns a clone of the object.
200 .Sp
201 All attributes which do the MooseX::Clone::Meta::Attribute::Trait::Clone
202 role will handle cloning of that attribute. All other fields are plainly copied
203 over, just like in \*(L"clone_object\*(R" in Class::MOP::Class.
204 .Sp
205 Attributes whose \f(CW\*(C`init_arg\*(C'\fR is in \f(CW%params\fR and who do the \f(CW\*(C`Clone\*(C'\fR trait will
206 get that argument passed to the \f(CW\*(C`clone\*(C'\fR method (dereferenced). If the
207 attribute does not self-clone then the param is used normally by
208 \&\*(L"clone_object\*(R" in Class::MOP::Class, that is it will simply shadow the previous
209 value, and does not have to be an array or hash reference.
210 .SH "TODO"
211 .IX Header "TODO"
212 Refactor to work in term of a metaclass trait so that \f(CW\*(C`meta\->clone_object\*(C'\fR
213 will still do the right thing.
214 .SH "THANKS"
215 .IX Header "THANKS"
216 clkao made the food required to write this module
217 .SH "VERSION CONTROL"
218 .IX Header "VERSION CONTROL"
219 <http://code2.0beta.co.uk/moose/svn/>. Ask on #moose for commit bits.
220 .SH "AUTHOR"
221 .IX Header "AUTHOR"
222 Yuval Kogman <nothingmuch@woobling.org>
223 .SH "COPYRIGHT"
224 .IX Header "COPYRIGHT"
225 .Vb 3
226 \&    Copyright (c) 2008 Yuval Kogman. All rights reserved
227 \&    This program is free software; you can redistribute
228 \&    it and/or modify it under the same terms as Perl itself.
229 .Ve