Skip to content

Commit a3bed67

Browse files
committed
perlclass: fixes, document behavior found in test cases
1 parent 9e37391 commit a3bed67

File tree

1 file changed

+86
-36
lines changed

1 file changed

+86
-36
lines changed

pod/perlclass.pod

Lines changed: 86 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,14 @@ perlclass - Perl class syntax reference
99

1010
class My::Example 1.234 {
1111
field $x;
12-
ADJUST { $x = "Hello, world"; }
1312

14-
method print_message { say $x; }
13+
ADJUST {
14+
$x = "Hello, world";
15+
}
16+
17+
method print_message {
18+
say $x;
19+
}
1520
}
1621

1722
My::Example->new->print_message;
@@ -40,59 +45,93 @@ the scope of current package:
4045

4146
=head2 class
4247

43-
class NAME BLOCK
48+
class NAME BLOCK
4449

45-
class NAME VERSION BLOCK
50+
class NAME VERSION BLOCK
4651

4752
The C<class> keyword declares a new package which is intended to be a class.
4853
All other keywords from the C<class> feature should be used in scope of this
4954
declaration.
5055

51-
There are following differences between C<package> and C<class> keywords:
52-
53-
=over
54-
55-
=item * Creates a new scope for variables declared using the L<field> keyword
56-
57-
=item * Classes automatically get a constructor named C<new>
58-
59-
You don't have to (and should not) write one.
56+
class WithVersion 1.000 {
57+
# class definition goes here
58+
}
6059

61-
=back
60+
C<class> and C<package> declarations are similar, but classes automatically get
61+
a constructor named C<new> - You don't have to (and should not) write one.
62+
Additionally, in the class BLOCK you are allowed to declare fields and methods.
6263

6364
=head2 field
6465

65-
field VARIABLE_NAME;
66+
field VARIABLE_NAME;
6667

6768
Fields are variables which are visible in the scope of the class - more
6869
specifically within L<method> and L<ADJUST> blocks. Each class instance get
6970
their own storage of fields, independent of each other.
7071

7172
A field behaves like a normal lexically scoped variable. It has a sigil and is
72-
private to the class unless an accessor method is created. The main difference
73-
is that different instances access different values in the same scope.
73+
private to the class (though creation of an accessor method will make it
74+
accessible from the outside). The main difference is that different instances
75+
access different values in the same scope.
76+
77+
class WithFields {
78+
field $scalar;
79+
field @array;
80+
field %hash;
81+
82+
ADJUST {
83+
$scalar = 42;
84+
@array = qw(this is just an array);
85+
%hash = (species => 'Marsian', planet => 'Mars');
86+
}
87+
}
7488

7589
=head2 method
7690

77-
method METHOD_NAME SIGNATURE BLOCK
91+
method METHOD_NAME SIGNATURE BLOCK
92+
93+
method METHOD_NAME BLOCK
94+
95+
method SIGNATURE BLOCK
96+
97+
method BLOCK
7898

79-
Methods are subroutines intended to call in the context of class objects.
99+
Methods are subroutines intended to be called in the context of class objects.
80100

81101
A variable named C<$self> populated with the current object instance will automatically be
82102
created in the lexical scope of C<method>.
83103

84104
Methods always act as if C<use feature 'signatures'> is in effect, but C<$self>
85105
will not appear in the arguments list as far as the signature is concerned.
86106

87-
class Class::WithSignatures {
107+
class WithMethods {
108+
field $greetings;
109+
110+
ADJUST {
111+
$greetings = "Hello";
112+
}
113+
88114
method greet($name = "someone") {
89-
say "Hello, $name";
115+
say "$greetings, $name";
116+
}
117+
}
118+
119+
Just like regular subroutines, methods I<can> be anonymous:
120+
121+
class AnonMethodFactory {
122+
123+
method get_anon_method {
124+
return method {
125+
return 'this is an anonymous method';
126+
};
90127
}
91128
}
92129

93130
=head1 ATTRIBUTES
94131

95-
Specific aspects of the keywords defined above are declared using I<attributes>.
132+
Specific aspects of the keywords mentioned above are managed using
133+
I<attributes>. Attributes all start with a colon, and one or more of them can
134+
be appended after the item's name, separated by a space.
96135

97136
=head2 Class attributes
98137

@@ -101,9 +140,9 @@ Specific aspects of the keywords defined above are declared using I<attributes>.
101140
Classes may inherit from B<one> superclass, by using the C<:isa> class
102141
attribute.
103142

104-
class Example::Base { ... }
143+
class Example::Base { ... }
105144

106-
class Example::Subclass :isa(Example::Base) { ... }
145+
class Example::Subclass :isa(Example::Base) { ... }
107146

108147
Inherited methods are visible and may be invoked. Fields are always lexical
109148
and therefore not visible by inheritence.
@@ -112,18 +151,18 @@ The C<:isa> attribute may request a minimum version of the base class; it is
112151
applied similar to C<use> - if the provided version is too low it will fail at
113152
compile time.
114153

115-
class Example::Subclass :isa(Example::Base 2.345) { ... }
154+
class Example::Subclass :isa(Example::Base 2.345) { ... }
116155

117156
The C<:isa> attribute will attempt to C<require> the named module if it is not
118157
already loaded.
119158

120159
=head2 Field attributes
121160

122-
TODO
161+
None yet.
123162

124163
=head2 Method attributes
125164

126-
TODO
165+
None yet.
127166

128167
=head1 OBJECT LIFECYCLE
129168

@@ -132,29 +171,40 @@ TODO
132171
Each object begins its life with a constructor call. The constructor is always
133172
named C<new> and is invoked like a method call on the class name:
134173

135-
my $object = My::Class->new(%arguments);
174+
my $object = My::Class->new(%arguments);
136175

137176
During the construction, class fields are compared to C<%arguments> hash and
138177
populated where possible.
139178

140179
=head2 Adjustment
141180

142181
Object adjustment can be performed during the construction to run user-defined
143-
code. It is done with the help of C<ADJUST> blocks, which run during the
144-
construction time of each instance.
182+
code. It is done with the help of C<ADJUST> blocks, which are called in order
183+
of declaration.
145184

146-
They are similar to C<BEGIN> blocks, which
147-
run during the compilation of a package. However, they also have access to
148-
C<$self> lexical (object instance).
185+
They are similar to C<BEGIN> blocks, which run during the compilation of a
186+
package. However, they also have access to C<$self> lexical (object instance)
187+
and all object fields created up to that point.
149188

150189
=head2 Lifetime
151190

152-
After the construction phase, object is ready to be used. Just like a normal
153-
reference, it will live as long as its reference count is greater than zero.
191+
After the construction phase, object is ready to be used.
192+
193+
Using C<blessed> (C<Scalar::Util::blessed> or C<builtin::blessed>) on the
194+
object will return the name of the class, while C<reftype>
195+
(C<Scalar::Util::reftype> or C<builtin::reftype>) will return the string
196+
C<'OBJECT'>.
154197

155198
=head2 Destruction
156199

157-
TODO
200+
Just like with other references, when object reference count reaches zero it
201+
will automatically be destroyed.
202+
203+
=head1 AUTHORS
204+
205+
Paul Evans
206+
207+
Bartosz Jarzyna
158208

159209
=cut
160210

0 commit comments

Comments
 (0)