1Want(3) User Contributed Perl Documentation Want(3)
2
3
4
6 Want - A generalisation of "wantarray"
7
9 use Want;
10 sub foo :lvalue {
11 if (want(qw'LVALUE ASSIGN')) {
12 print "We have been assigned ", want('ASSIGN');
13 lnoreturn;
14 }
15 elsif (want('LIST')) {
16 rreturn (1, 2, 3);
17 }
18 elsif (want('BOOL')) {
19 rreturn 0;
20 }
21 elsif (want(qw'SCALAR !REF')) {
22 rreturn 23;
23 }
24 elsif (want('HASH')) {
25 rreturn { foo => 17, bar => 23 };
26 }
27 return; # You have to put this at the end to keep the compiler happy
28 }
29
31 This module generalises the mechanism of the wantarray function,
32 allowing a function to determine in some detail how its return value is
33 going to be immediately used.
34
35 Top-level contexts:
36 The three kinds of top-level context are well known:
37
38 VOID
39 The return value is not being used in any way. It could be an
40 entire statement like "foo();", or the last component of a compound
41 statement which is itself in void context, such as "$test ||
42 foo();"n. Be warned that the last statement of a subroutine will be
43 in whatever context the subroutine was called in, because the
44 result is implicitly returned.
45
46 SCALAR
47 The return value is being treated as a scalar value of some sort:
48
49 my $x = foo();
50 $y += foo();
51 print "123" x foo();
52 print scalar foo();
53 warn foo()->{23};
54 ...etc...
55
56 LIST
57 The return value is treated as a list of values:
58
59 my @x = foo();
60 my ($x) = foo();
61 () = foo(); # even though the results are discarded
62 print foo();
63 bar(foo()); # unless the bar subroutine has a prototype
64 print @hash{foo()}; # (hash slice)
65 ...etc...
66
67 Lvalue subroutines:
68 The introduction of lvalue subroutines in Perl 5.6 has created a new
69 type of contextual information, which is independent of those listed
70 above. When an lvalue subroutine is called, it can either be called in
71 the ordinary way (so that its result is treated as an ordinary value,
72 an rvalue); or else it can be called so that its result is considered
73 updatable, an lvalue.
74
75 These rather arcane terms (lvalue and rvalue) are easier to remember if
76 you know why they are so called. If you consider a simple assignment
77 statement "left = right", then the left-hand side is an lvalue and the
78 right-hand side is an rvalue.
79
80 So (for lvalue subroutines only) there are two new types of context:
81
82 RVALUE
83 The caller is definitely not trying to assign to the result:
84
85 foo();
86 my $x = foo();
87 ...etc...
88
89 If the sub is declared without the ":lvalue" attribute, then it
90 will always be in RVALUE context.
91
92 If you need to return values from an lvalue subroutine in RVALUE
93 context, you should use the "rreturn" function rather than an
94 ordinary "return". Otherwise you'll probably get a compile-time
95 error in perl 5.6.1 and later.
96
97 LVALUE
98 Either the caller is directly assigning to the result of the sub
99 call:
100
101 foo() = $x;
102 foo() = (1, 1, 2, 3, 5, 8);
103
104 or the caller is making a reference to the result, which might be
105 assigned to later:
106
107 my $ref = \(foo()); # Could now have: $$ref = 99;
108
109 # Note that this example imposes LIST context on the sub call.
110 # So we're taking a reference to the first element to be
111 # returned _in list context_.
112 # If we want to call the function in scalar context, we can
113 # do it like this:
114 my $ref = \(scalar foo());
115
116 or else the result of the function call is being used as part of
117 the argument list for another function call:
118
119 bar(foo()); # Will *always* call foo in lvalue context,
120 # (provided that foo is an C<:lvalue> sub)
121 # regardless of what bar actually does.
122
123 The reason for this last case is that bar might be a sub which
124 modifies its arguments. They're rare in contemporary Perl code, but
125 perfectly possible:
126
127 sub bar {
128 $_[0] = 23;
129 }
130
131 (This is really a throwback to Perl 4, which didn't support
132 explicit references.)
133
134 Assignment context:
135 The commonest use of lvalue subroutines is with the assignment
136 statement:
137
138 size() = 12;
139 (list()) = (1..10);
140
141 A useful motto to remember when thinking about assignment statements is
142 context comes from the left. Consider code like this:
143
144 my ($x, $y, $z);
145 sub list () :lvalue { ($x, $y, $z) }
146 list = (1, 2, 3);
147 print "\$x = $x; \$y = $y; \$z = $z\n";
148
149 This prints "$x = ; $y = ; $z = 3", which may not be what you were
150 expecting. The reason is that the assignment is in scalar context, so
151 the comma operator is in scalar context too, and discards all values
152 but the last. You can fix it by writing "(list) = (1,2,3);" instead.
153
154 If your lvalue subroutine is used on the left of an assignment
155 statement, it's in ASSIGN context. If ASSIGN is the only argument to
156 "want()", then it returns a reference to an array of the value(s) of
157 the right-hand side.
158
159 In this case, you should return with the "lnoreturn" function, rather
160 than an ordinary "return".
161
162 This makes it very easy to write lvalue subroutines which do clever
163 things:
164
165 use Want;
166 use strict;
167 sub backstr :lvalue {
168 if (want(qw'LVALUE ASSIGN')) {
169 my ($a) = want('ASSIGN');
170 $_[0] = reverse $a;
171 lnoreturn;
172 }
173 elsif (want('RVALUE')) {
174 rreturn scalar reverse $_[0];
175 }
176 else {
177 carp("Not in ASSIGN context");
178 }
179 return
180 }
181
182 print "foo -> ", backstr("foo"), "\n"; # foo -> oof
183 backstr(my $robin) = "nibor";
184 print "\$robin is now $robin\n"; # $robin is now robin
185
186 Notice that you need to put a (meaningless) return statement at the end
187 of the function, otherwise you will get the error Can't modify non-
188 lvalue subroutine call in lvalue subroutine return.
189
190 The only way to write that "backstr" function without using Want is to
191 return a tied variable which is tied to a custom class.
192
193 Reference context:
194 Sometimes in scalar context the caller is expecting a reference of some
195 sort to be returned:
196
197 print foo()->(); # CODE reference expected
198 print foo()->{bar}; # HASH reference expected
199 print foo()->[23]; # ARRAY reference expected
200 print ${foo()}; # SCALAR reference expected
201 print foo()->bar(); # OBJECT reference expected
202
203 my $format = *{foo()}{FORMAT} # GLOB reference expected
204
205 You can check this using conditionals like "if (want('CODE'))". There
206 is also a function "wantref()" which returns one of the strings "CODE",
207 "HASH", "ARRAY", "GLOB", "SCALAR" or "OBJECT"; or the empty string if a
208 reference is not expected.
209
210 Because "want('SCALAR')" is already used to select ordinary scalar
211 context, you have to use "want('REFSCALAR')" to find out if a SCALAR
212 reference is expected. Or you could use "want('REF') eq 'SCALAR'" of
213 course.
214
215 Be warned that "want('ARRAY')" is a very different thing from
216 "wantarray()".
217
218 Item count
219 Sometimes in list context the caller is expecting a particular number
220 of items to be returned:
221
222 my ($x, $y) = foo(); # foo is expected to return two items
223
224 If you pass a number to the "want" function, then it will return true
225 or false according to whether at least that many items are wanted. So
226 if we are in the definition of a sub which is being called as above,
227 then:
228
229 want(1) returns true
230 want(2) returns true
231 want(3) returns false
232
233 Sometimes there is no limit to the number of items that might be used:
234
235 my @x = foo();
236 do_something_with( foo() );
237
238 In this case, want(2), "want(100)", "want(1E9)" and so on will all
239 return true; and so will "want('Infinity')".
240
241 The "howmany" function can be used to find out how many items are
242 wanted. If the context is scalar, then want(1) returns true and
243 "howmany()" returns 1. If you want to check whether your result is
244 being assigned to a singleton list, you can say "if (want('LIST', 1)) {
245 ... }".
246
247 Boolean context
248 Sometimes the caller is only interested in the truth or falsity of a
249 function's return value:
250
251 if (everything_is_okay()) {
252 # Carry on
253 }
254
255 print (foo() ? "ok\n" : "not ok\n");
256
257 In the following example, all subroutine calls are in BOOL context:
258
259 my $x = ( (foo() && !bar()) xor (baz() || quux()) );
260
261 Boolean context, like the reference contexts above, is considered to be
262 a subcontext of SCALAR.
263
265 want(SPECIFIERS)
266 This is the primary interface to this module, and should suffice
267 for most purposes. You pass it a list of context specifiers, and
268 the return value is true whenever all of the specifiers hold.
269
270 want('LVALUE', 'SCALAR'); # Are we in scalar lvalue context?
271 want('RVALUE', 3); # Are at least three rvalues wanted?
272 want('ARRAY'); # Is the return value used as an array ref?
273
274 You can also prefix a specifier with an exclamation mark to
275 indicate that you don't want it to be true
276
277 want(2, '!3'); # Caller wants exactly two items.
278 want(qw'REF !CODE !GLOB'); # Expecting a reference that
279 # isn't a CODE or GLOB ref.
280 want(100, '!Infinity'); # Expecting at least 100 items,
281 # but there is a limit.
282
283 If the REF keyword is the only parameter passed, then the type of
284 reference will be returned. This is just a synonym for the
285 "wantref" function: it's included because you might find it useful
286 if you don't want to pollute your namespace by importing several
287 functions, and to conform to Damian Conway's suggestion in RFC 21.
288
289 Finally, the keyword COUNT can be used, provided that it's the only
290 keyword you pass. Mixing COUNT with other keywords is an error.
291 This is a synonym for the "howmany" function.
292
293 A full list of the permitted keyword is in the ARGUMENTS section
294 below.
295
296 rreturn
297 Use this function instead of "return" from inside an lvalue
298 subroutine when you know that you're in RVALUE context. If you try
299 to use a normal "return", you'll get a compile-time error in Perl
300 5.6.1 and above unless you return an lvalue.
301
302 lnoreturn
303 Use this function instead of "return" from inside an lvalue
304 subroutine when you're in ASSIGN context and you've used
305 "want('ASSIGN')" to carry out the appropriate action.
306
307 If you use "rreturn" or "lnoreturn", then you have to put a bare
308 "return;" at the very end of your lvalue subroutine, in order to
309 stop the Perl compiler from complaining. Think of it as akin to the
310 "1;" that you have to put at the end of a module.
311
312 howmany()
313 Returns the expectation count, i.e. the number of items expected.
314 If the expectation count is undefined, that indicates that an
315 unlimited number of items might be used (e.g. the return value is
316 being assigned to an array). In void context the expectation count
317 is zero, and in scalar context it is one.
318
319 The same as "want('COUNT')".
320
321 wantref()
322 Returns the type of reference which the caller is expecting, or the
323 empty string if the caller isn't expecting a reference immediately.
324
325 The same as "want('REF')".
326
328 use Carp 'croak';
329 use Want 'howmany';
330 sub numbers {
331 my $count = howmany();
332 croak("Can't make an infinite list") if !defined($count);
333 return (1..$count);
334 }
335 my ($one, $two, $three) = numbers();
336
337
338 use Want 'want';
339 sub pi () {
340 if (want('ARRAY')) {
341 return [3, 1, 4, 1, 5, 9];
342 }
343 elsif (want('LIST')) {
344 return (3, 1, 4, 1, 5, 9);
345 }
346 else {
347 return 3;
348 }
349 }
350 print pi->[2]; # prints 4
351 print ((pi)[3]); # prints 1
352
354 The permitted arguments to the "want" function are listed below. The
355 list is structured so that sub-contexts appear below the context that
356 they are part of.
357
358 · VOID
359
360 · SCALAR
361
362 · REF
363
364 · REFSCALAR
365
366 · CODE
367
368 · HASH
369
370 · ARRAY
371
372 · GLOB
373
374 · OBJECT
375
376 · BOOL
377
378 · LIST
379
380 · COUNT
381
382 · <number>
383
384 · Infinity
385
386 · LVALUE
387
388 · ASSIGN
389
390 · RVALUE
391
393 The "want" and "rreturn" functions are exported by default. The
394 "wantref" and/or "howmany" functions can also be imported:
395
396 use Want qw'want howmany';
397
398 If you don't import these functions, you must qualify their names as
399 (e.g.) "Want::wantref".
400
402 This module is still under development, and the public interface may
403 change in future versions. The "want" function can now be regarded as
404 stable.
405
406 I'd be interested to know how you're using this module.
407
409 There are two different levels of BOOL context. Pure boolean context
410 occurs in conditional expressions, and the operands of the "xor" and
411 "!"/"not" operators. Pure boolean context also propagates down through
412 the "&&" and "||" operators.
413
414 However, consider an expression like "my $x = foo() && "yes"". The
415 subroutine is called in pseudo-boolean context - its return value isn't
416 entirely ignored, because the undefined value, the empty string and the
417 integer 0 are all false.
418
419 At the moment "want('BOOL')" is true in either pure or pseudo boolean
420 context. Let me know if this is a problem.
421
423 * Doesn't work from inside a tie-handler.
424
426 Robin Houston, <robin@cpan.org>
427
428 Thanks to Damian Conway for encouragement and good suggestions.
429
431 · "wantarray" in perlfunc
432
433 · Perl6 RFC 21, by Damian Conway. http://dev.perl.org/rfc/21.html
434
436 Copyright (c) 2001-2006, Robin Houston. All Rights Reserved. This
437 module is free software. It may be used, redistributed and/or modified
438 under the same terms as Perl itself.
439
440
441
442perl v5.12.0 2008-02-04 Want(3)