This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
d0d53c30958c406aef8014c559dcc4742125a2c6
[perl5.git] / t / op / signatures.t
1 #!perl
2
3 BEGIN {
4     chdir 't';
5     @INC = '../lib';
6     require './test.pl';
7 }
8 plan 768;
9
10 eval "#line 8 foo\nsub t004 :method (\$a) { }";
11 is $@, "Experimental subroutine signatures not enabled at foo line 8\.\n",
12     "error when not enabled";
13
14 eval "#line 8 foo\nsub t005 (\$) (\$a) { }";
15 is $@, "Experimental subroutine signatures not enabled at foo line 8\.\n",
16     "error when not enabled";
17
18 no warnings "illegalproto";
19
20 our $a = 123;
21 our $z;
22
23 sub t000 ($a) { $a || "z" }
24 is prototype(\&t000), "\$a", "(\$a) interpreted as protoype when not enabled";
25 is &t000(456), 123, "(\$a) not signature when not enabled";
26 is $a, 123;
27
28 no warnings "experimental::signatures";
29 use feature "signatures";
30
31 sub t001 { $a || "z" }
32 is prototype(\&t001), undef;
33 is eval("t001()"), 123;
34 is eval("t001(456)"), 123;
35 is eval("t001(456, 789)"), 123;
36 is $a, 123;
37
38 sub t002 () { $a || "z" }
39 is prototype(\&t002), undef;
40 is eval("t002()"), 123;
41 is eval("t002(456)"), undef;
42 like $@, qr/\AToo many arguments for subroutine at/;
43 is eval("t002(456, 789)"), undef;
44 like $@, qr/\AToo many arguments for subroutine at/;
45 is $a, 123;
46
47 sub t003 ( ) { $a || "z" }
48 is prototype(\&t003), undef;
49 is eval("t003()"), 123;
50 is eval("t003(456)"), undef;
51 like $@, qr/\AToo many arguments for subroutine at/;
52 is eval("t003(456, 789)"), undef;
53 like $@, qr/\AToo many arguments for subroutine at/;
54 is $a, 123;
55
56 sub t006 ($a) { $a || "z" }
57 is prototype(\&t006), undef;
58 is eval("t006()"), undef;
59 like $@, qr/\AToo few arguments for subroutine at/;
60 is eval("t006(0)"), "z";
61 is eval("t006(456)"), 456;
62 is eval("t006(456, 789)"), undef;
63 like $@, qr/\AToo many arguments for subroutine at/;
64 is eval("t006(456, 789, 987)"), undef;
65 like $@, qr/\AToo many arguments for subroutine at/;
66 is $a, 123;
67
68 sub t007 ($a, $b) { $a.$b }
69 is prototype(\&t007), undef;
70 is eval("t007()"), undef;
71 like $@, qr/\AToo few arguments for subroutine at/;
72 is eval("t007(456)"), undef;
73 like $@, qr/\AToo few arguments for subroutine at/;
74 is eval("t007(456, 789)"), "456789";
75 is eval("t007(456, 789, 987)"), undef;
76 like $@, qr/\AToo many arguments for subroutine at/;
77 is eval("t007(456, 789, 987, 654)"), undef;
78 like $@, qr/\AToo many arguments for subroutine at/;
79 is $a, 123;
80
81 sub t008 ($a, $b, $c) { $a.$b.$c }
82 is prototype(\&t008), undef;
83 is eval("t008()"), undef;
84 like $@, qr/\AToo few arguments for subroutine at/;
85 is eval("t008(456)"), undef;
86 like $@, qr/\AToo few arguments for subroutine at/;
87 is eval("t008(456, 789)"), undef;
88 like $@, qr/\AToo few arguments for subroutine at/;
89 is eval("t008(456, 789, 987)"), "456789987";
90 is eval("t008(456, 789, 987, 654)"), undef;
91 like $@, qr/\AToo many arguments for subroutine at/;
92 is $a, 123;
93
94 sub t009 ($abc, $def) { $abc.$def }
95 is prototype(\&t009), undef;
96 is eval("t009()"), undef;
97 like $@, qr/\AToo few arguments for subroutine at/;
98 is eval("t009(456)"), undef;
99 like $@, qr/\AToo few arguments for subroutine at/;
100 is eval("t009(456, 789)"), "456789";
101 is eval("t009(456, 789, 987)"), undef;
102 like $@, qr/\AToo many arguments for subroutine at/;
103 is eval("t009(456, 789, 987, 654)"), undef;
104 like $@, qr/\AToo many arguments for subroutine at/;
105 is $a, 123;
106
107 sub t010 ($a, $) { $a || "z" }
108 is prototype(\&t010), undef;
109 is eval("t010()"), undef;
110 like $@, qr/\AToo few arguments for subroutine at/;
111 is eval("t010(456)"), undef;
112 like $@, qr/\AToo few arguments for subroutine at/;
113 is eval("t010(0, 789)"), "z";
114 is eval("t010(456, 789)"), 456;
115 is eval("t010(456, 789, 987)"), undef;
116 like $@, qr/\AToo many arguments for subroutine at/;
117 is eval("t010(456, 789, 987, 654)"), undef;
118 like $@, qr/\AToo many arguments for subroutine at/;
119 is $a, 123;
120
121 sub t011 ($, $a) { $a || "z" }
122 is prototype(\&t011), undef;
123 is eval("t011()"), undef;
124 like $@, qr/\AToo few arguments for subroutine at/;
125 is eval("t011(456)"), undef;
126 like $@, qr/\AToo few arguments for subroutine at/;
127 is eval("t011(456, 0)"), "z";
128 is eval("t011(456, 789)"), 789;
129 is eval("t011(456, 789, 987)"), undef;
130 like $@, qr/\AToo many arguments for subroutine at/;
131 is eval("t011(456, 789, 987, 654)"), undef;
132 like $@, qr/\AToo many arguments for subroutine at/;
133 is $a, 123;
134
135 sub t012 ($, $) { $a || "z" }
136 is prototype(\&t012), undef;
137 is eval("t012()"), undef;
138 like $@, qr/\AToo few arguments for subroutine at/;
139 is eval("t012(456)"), undef;
140 like $@, qr/\AToo few arguments for subroutine at/;
141 is eval("t012(0, 789)"), 123;
142 is eval("t012(456, 789)"), 123;
143 is eval("t012(456, 789, 987)"), undef;
144 like $@, qr/\AToo many arguments for subroutine at/;
145 is eval("t012(456, 789, 987, 654)"), undef;
146 like $@, qr/\AToo many arguments for subroutine at/;
147 is $a, 123;
148
149 sub t013 ($) { $a || "z" }
150 is prototype(\&t013), undef;
151 is eval("t013()"), undef;
152 like $@, qr/\AToo few arguments for subroutine at/;
153 is eval("t013(0)"), 123;
154 is eval("t013(456)"), 123;
155 is eval("t013(456, 789)"), undef;
156 like $@, qr/\AToo many arguments for subroutine at/;
157 is eval("t013(456, 789, 987)"), undef;
158 like $@, qr/\AToo many arguments for subroutine at/;
159 is eval("t013(456, 789, 987, 654)"), undef;
160 like $@, qr/\AToo many arguments for subroutine at/;
161 is $a, 123;
162
163 sub t014 ($a = 222) { $a // "z" }
164 is prototype(\&t014), undef;
165 is eval("t014()"), 222;
166 is eval("t014(0)"), 0;
167 is eval("t014(undef)"), "z";
168 is eval("t014(456)"), 456;
169 is eval("t014(456, 789)"), undef;
170 like $@, qr/\AToo many arguments for subroutine at/;
171 is eval("t014(456, 789, 987)"), undef;
172 like $@, qr/\AToo many arguments for subroutine at/;
173 is $a, 123;
174
175 sub t015 ($a = undef) { $a // "z" }
176 is prototype(\&t015), undef;
177 is eval("t015()"), "z";
178 is eval("t015(0)"), 0;
179 is eval("t015(undef)"), "z";
180 is eval("t015(456)"), 456;
181 is eval("t015(456, 789)"), undef;
182 like $@, qr/\AToo many arguments for subroutine at/;
183 is eval("t015(456, 789, 987)"), undef;
184 like $@, qr/\AToo many arguments for subroutine at/;
185 is $a, 123;
186
187 sub t016 ($a = do { $z++; 222 }) { $a // "z" }
188 $z = 0;
189 is prototype(\&t016), undef;
190 is eval("t016()"), 222;
191 is $z, 1;
192 is eval("t016(0)"), 0;
193 is eval("t016(undef)"), "z";
194 is eval("t016(456)"), 456;
195 is eval("t016(456, 789)"), undef;
196 like $@, qr/\AToo many arguments for subroutine at/;
197 is eval("t016(456, 789, 987)"), undef;
198 like $@, qr/\AToo many arguments for subroutine at/;
199 is $z, 1;
200 is eval("t016()"), 222;
201 is $z, 2;
202 is $a, 123;
203
204 sub t018 { join("/", @_) }
205 sub t017 ($p = t018 222, $a = 333) { $p // "z" }
206 is prototype(\&t017), undef;
207 is eval("t017()"), "222/333";
208 is $a, 333;
209 $a = 123;
210 is eval("t017(0)"), 0;
211 is eval("t017(undef)"), "z";
212 is eval("t017(456)"), 456;
213 is eval("t017(456, 789)"), undef;
214 like $@, qr/\AToo many arguments for subroutine at/;
215 is eval("t017(456, 789, 987)"), undef;
216 like $@, qr/\AToo many arguments for subroutine at/;
217 is $a, 123;
218
219 sub t019 ($p = 222, $a = 333) { "$p/$a" }
220 is prototype(\&t019), undef;
221 is eval("t019()"), "222/333";
222 is eval("t019(0)"), "0/333";
223 is eval("t019(456)"), "456/333";
224 is eval("t019(456, 789)"), "456/789";
225 is eval("t019(456, 789, 987)"), undef;
226 like $@, qr/\AToo many arguments for subroutine at/;
227 is $a, 123;
228
229 sub t020 :prototype($) { $_[0]."z" }
230 sub t021 ($p = t020 222, $a = 333) { "$p/$a" }
231 is prototype(\&t021), undef;
232 is eval("t021()"), "222z/333";
233 is eval("t021(0)"), "0/333";
234 is eval("t021(456)"), "456/333";
235 is eval("t021(456, 789)"), "456/789";
236 is eval("t021(456, 789, 987)"), undef;
237 like $@, qr/\AToo many arguments for subroutine at/;
238 is $a, 123;
239
240 sub t022 ($p = do { $z += 10; 222 }, $a = do { $z++; 333 }) { "$p/$a" }
241 $z = 0;
242 is prototype(\&t022), undef;
243 is eval("t022()"), "222/333";
244 is $z, 11;
245 is eval("t022(0)"), "0/333";
246 is $z, 12;
247 is eval("t022(456)"), "456/333";
248 is $z, 13;
249 is eval("t022(456, 789)"), "456/789";
250 is eval("t022(456, 789, 987)"), undef;
251 like $@, qr/\AToo many arguments for subroutine at/;
252 is $z, 13;
253 is $a, 123;
254
255 sub t023 ($a = sub { $_[0]."z" }) { $a->("a")."y" }
256 is prototype(\&t023), undef;
257 is eval("t023()"), "azy";
258 is eval("t023(sub { \"x\".\$_[0].\"x\" })"), "xaxy";
259 is eval("t023(sub { \"x\".\$_[0].\"x\" }, 789)"), undef;
260 like $@, qr/\AToo many arguments for subroutine at/;
261 is $a, 123;
262
263 sub t036 ($a = $a."x") { $a."y" }
264 is prototype(\&t036), undef;
265 is eval("t036()"), "123xy";
266 is eval("t036(0)"), "0y";
267 is eval("t036(456)"), "456y";
268 is eval("t036(456, 789)"), undef;
269 like $@, qr/\AToo many arguments for subroutine at/;
270 is $a, 123;
271
272 sub t037 ($a = 222, $b = $a."x") { "$a/$b" }
273 is prototype(\&t037), undef;
274 is eval("t037()"), "222/222x";
275 is eval("t037(0)"), "0/0x";
276 is eval("t037(456)"), "456/456x";
277 is eval("t037(456, 789)"), "456/789";
278 is eval("t037(456, 789, 987)"), undef;
279 like $@, qr/\AToo many arguments for subroutine at/;
280 is $a, 123;
281
282 eval "#line 8 foo\nsub t024 (\$a =) { }";
283 is $@, "Optional parameter lacks default expression at foo line 8\.\n";
284
285 sub t025 ($ = undef) { $a // "z" }
286 is prototype(\&t025), undef;
287 is eval("t025()"), 123;
288 is eval("t025(0)"), 123;
289 is eval("t025(456)"), 123;
290 is eval("t025(456, 789)"), undef;
291 like $@, qr/\AToo many arguments for subroutine at/;
292 is eval("t025(456, 789, 987)"), undef;
293 like $@, qr/\AToo many arguments for subroutine at/;
294 is eval("t025(456, 789, 987, 654)"), undef;
295 like $@, qr/\AToo many arguments for subroutine at/;
296 is $a, 123;
297
298 sub t026 ($ = 222) { $a // "z" }
299 is prototype(\&t026), undef;
300 is eval("t026()"), 123;
301 is eval("t026(0)"), 123;
302 is eval("t026(456)"), 123;
303 is eval("t026(456, 789)"), undef;
304 like $@, qr/\AToo many arguments for subroutine at/;
305 is eval("t026(456, 789, 987)"), undef;
306 like $@, qr/\AToo many arguments for subroutine at/;
307 is eval("t026(456, 789, 987, 654)"), undef;
308 like $@, qr/\AToo many arguments for subroutine at/;
309 is $a, 123;
310
311 sub t032 ($ = do { $z++; 222 }) { $a // "z" }
312 $z = 0;
313 is prototype(\&t032), undef;
314 is eval("t032()"), 123;
315 is $z, 1;
316 is eval("t032(0)"), 123;
317 is eval("t032(456)"), 123;
318 is eval("t032(456, 789)"), undef;
319 like $@, qr/\AToo many arguments for subroutine at/;
320 is eval("t032(456, 789, 987)"), undef;
321 like $@, qr/\AToo many arguments for subroutine at/;
322 is eval("t032(456, 789, 987, 654)"), undef;
323 like $@, qr/\AToo many arguments for subroutine at/;
324 is $z, 1;
325 is $a, 123;
326
327 sub t027 ($ =) { $a // "z" }
328 is prototype(\&t027), undef;
329 is eval("t027()"), 123;
330 is eval("t027(0)"), 123;
331 is eval("t027(456)"), 123;
332 is eval("t027(456, 789)"), undef;
333 like $@, qr/\AToo many arguments for subroutine at/;
334 is eval("t027(456, 789, 987)"), undef;
335 like $@, qr/\AToo many arguments for subroutine at/;
336 is eval("t027(456, 789, 987, 654)"), undef;
337 like $@, qr/\AToo many arguments for subroutine at/;
338 is $a, 123;
339
340 sub t119 ($ =, $a = 333) { $a // "z" }
341 is prototype(\&t119), undef;
342 is eval("t119()"), 333;
343 is eval("t119(0)"), 333;
344 is eval("t119(456)"), 333;
345 is eval("t119(456, 789)"), 789;
346 is eval("t119(456, 789, 987)"), undef;
347 like $@, qr/\AToo many arguments for subroutine at/;
348 is eval("t119(456, 789, 987, 654)"), undef;
349 like $@, qr/\AToo many arguments for subroutine at/;
350 is $a, 123;
351
352 sub t028 ($a, $b = 333) { "$a/$b" }
353 is prototype(\&t028), undef;
354 is eval("t028()"), undef;
355 like $@, qr/\AToo few arguments for subroutine at/;
356 is eval("t028(0)"), "0/333";
357 is eval("t028(456)"), "456/333";
358 is eval("t028(456, 789)"), "456/789";
359 is eval("t028(456, 789, 987)"), undef;
360 like $@, qr/\AToo many arguments for subroutine at/;
361 is $a, 123;
362
363 sub t045 ($a, $ = 333) { "$a/" }
364 is prototype(\&t045), undef;
365 is eval("t045()"), undef;
366 like $@, qr/\AToo few arguments for subroutine at/;
367 is eval("t045(0)"), "0/";
368 is eval("t045(456)"), "456/";
369 is eval("t045(456, 789)"), "456/";
370 is eval("t045(456, 789, 987)"), undef;
371 like $@, qr/\AToo many arguments for subroutine at/;
372 is $a, 123;
373
374 sub t046 ($, $b = 333) { "$a/$b" }
375 is prototype(\&t046), undef;
376 is eval("t046()"), undef;
377 like $@, qr/\AToo few arguments for subroutine at/;
378 is eval("t046(0)"), "123/333";
379 is eval("t046(456)"), "123/333";
380 is eval("t046(456, 789)"), "123/789";
381 is eval("t046(456, 789, 987)"), undef;
382 like $@, qr/\AToo many arguments for subroutine at/;
383 is $a, 123;
384
385 sub t047 ($, $ = 333) { "$a/" }
386 is prototype(\&t047), undef;
387 is eval("t047()"), undef;
388 like $@, qr/\AToo few arguments for subroutine at/;
389 is eval("t047(0)"), "123/";
390 is eval("t047(456)"), "123/";
391 is eval("t047(456, 789)"), "123/";
392 is eval("t047(456, 789, 987)"), undef;
393 like $@, qr/\AToo many arguments for subroutine at/;
394 is $a, 123;
395
396 sub t029 ($a, $b, $c = 222, $d = 333) { "$a/$b/$c/$d" }
397 is prototype(\&t029), undef;
398 is eval("t029()"), undef;
399 like $@, qr/\AToo few arguments for subroutine at/;
400 is eval("t029(0)"), undef;
401 like $@, qr/\AToo few arguments for subroutine at/;
402 is eval("t029(456)"), undef;
403 like $@, qr/\AToo few arguments for subroutine at/;
404 is eval("t029(456, 789)"), "456/789/222/333";
405 is eval("t029(456, 789, 987)"), "456/789/987/333";
406 is eval("t029(456, 789, 987, 654)"), "456/789/987/654";
407 is eval("t029(456, 789, 987, 654, 321)"), undef;
408 like $@, qr/\AToo many arguments for subroutine at/;
409 is eval("t029(456, 789, 987, 654, 321, 111)"), undef;
410 like $@, qr/\AToo many arguments for subroutine at/;
411 is $a, 123;
412
413 sub t038 ($a, $b = $a."x") { "$a/$b" }
414 is prototype(\&t038), undef;
415 is eval("t038()"), undef;
416 like $@, qr/\AToo few arguments for subroutine at/;
417 is eval("t038(0)"), "0/0x";
418 is eval("t038(456)"), "456/456x";
419 is eval("t038(456, 789)"), "456/789";
420 is eval("t038(456, 789, 987)"), undef;
421 like $@, qr/\AToo many arguments for subroutine at/;
422 is $a, 123;
423
424 eval "#line 8 foo\nsub t030 (\$a = 222, \$b) { }";
425 is $@, "Mandatory parameter follows optional parameter at foo line 8\.\n";
426
427 eval "#line 8 foo\nsub t031 (\$a = 222, \$b = 333, \$c, \$d) { }";
428 is $@, "Mandatory parameter follows optional parameter at foo line 8\.\n";
429
430 sub t034 (@abc) { join("/", @abc).";".scalar(@abc) }
431 is prototype(\&t034), undef;
432 is eval("t034()"), ";0";
433 is eval("t034(0)"), "0;1";
434 is eval("t034(456)"), "456;1";
435 is eval("t034(456, 789)"), "456/789;2";
436 is eval("t034(456, 789, 987)"), "456/789/987;3";
437 is eval("t034(456, 789, 987, 654)"), "456/789/987/654;4";
438 is eval("t034(456, 789, 987, 654, 321)"), "456/789/987/654/321;5";
439 is eval("t034(456, 789, 987, 654, 321, 111)"), "456/789/987/654/321/111;6";
440 is $a, 123;
441
442 sub t035 (@) { $a }
443 is prototype(\&t035), undef;
444 is eval("t035()"), 123;
445 is eval("t035(0)"), 123;
446 is eval("t035(456)"), 123;
447 is eval("t035(456, 789)"), 123;
448 is eval("t035(456, 789, 987)"), 123;
449 is eval("t035(456, 789, 987, 654)"), 123;
450 is eval("t035(456, 789, 987, 654, 321)"), 123;
451 is eval("t035(456, 789, 987, 654, 321, 111)"), 123;
452 is $a, 123;
453
454 sub t039 (%abc) { join("/", map { $_."=".$abc{$_} } sort keys %abc) }
455 is prototype(\&t039), undef;
456 is eval("t039()"), "";
457 is eval("t039(0)"), undef;
458 like $@, qr#\AOdd name/value argument for subroutine at#;
459 is eval("t039(456)"), undef;
460 like $@, qr#\AOdd name/value argument for subroutine at#;
461 is eval("t039(456, 789)"), "456=789";
462 is eval("t039(456, 789, 987)"), undef;
463 like $@, qr#\AOdd name/value argument for subroutine at#;
464 is eval("t039(456, 789, 987, 654)"), "456=789/987=654";
465 is eval("t039(456, 789, 987, 654, 321)"), undef;
466 like $@, qr#\AOdd name/value argument for subroutine at#;
467 is eval("t039(456, 789, 987, 654, 321, 111)"), "321=111/456=789/987=654";
468 is $a, 123;
469
470 sub t040 (%) { $a }
471 is prototype(\&t040), undef;
472 is eval("t040()"), 123;
473 is eval("t040(0)"), undef;
474 like $@, qr#\AOdd name/value argument for subroutine at#;
475 is eval("t040(456)"), undef;
476 like $@, qr#\AOdd name/value argument for subroutine at#;
477 is eval("t040(456, 789)"), 123;
478 is eval("t040(456, 789, 987)"), undef;
479 like $@, qr#\AOdd name/value argument for subroutine at#;
480 is eval("t040(456, 789, 987, 654)"), 123;
481 is eval("t040(456, 789, 987, 654, 321)"), undef;
482 like $@, qr#\AOdd name/value argument for subroutine at#;
483 is eval("t040(456, 789, 987, 654, 321, 111)"), 123;
484 is $a, 123;
485
486 sub t041 ($a, @b) { $a.";".join("/", @b) }
487 is prototype(\&t041), undef;
488 is eval("t041()"), undef;
489 like $@, qr/\AToo few arguments for subroutine at/;
490 is eval("t041(0)"), "0;";
491 is eval("t041(456)"), "456;";
492 is eval("t041(456, 789)"), "456;789";
493 is eval("t041(456, 789, 987)"), "456;789/987";
494 is eval("t041(456, 789, 987, 654)"), "456;789/987/654";
495 is eval("t041(456, 789, 987, 654, 321)"), "456;789/987/654/321";
496 is eval("t041(456, 789, 987, 654, 321, 111)"), "456;789/987/654/321/111";
497 is $a, 123;
498
499 sub t042 ($a, @) { $a.";" }
500 is prototype(\&t042), undef;
501 is eval("t042()"), undef;
502 like $@, qr/\AToo few arguments for subroutine at/;
503 is eval("t042(0)"), "0;";
504 is eval("t042(456)"), "456;";
505 is eval("t042(456, 789)"), "456;";
506 is eval("t042(456, 789, 987)"), "456;";
507 is eval("t042(456, 789, 987, 654)"), "456;";
508 is eval("t042(456, 789, 987, 654, 321)"), "456;";
509 is eval("t042(456, 789, 987, 654, 321, 111)"), "456;";
510 is $a, 123;
511
512 sub t043 ($, @b) { $a.";".join("/", @b) }
513 is prototype(\&t043), undef;
514 is eval("t043()"), undef;
515 like $@, qr/\AToo few arguments for subroutine at/;
516 is eval("t043(0)"), "123;";
517 is eval("t043(456)"), "123;";
518 is eval("t043(456, 789)"), "123;789";
519 is eval("t043(456, 789, 987)"), "123;789/987";
520 is eval("t043(456, 789, 987, 654)"), "123;789/987/654";
521 is eval("t043(456, 789, 987, 654, 321)"), "123;789/987/654/321";
522 is eval("t043(456, 789, 987, 654, 321, 111)"), "123;789/987/654/321/111";
523 is $a, 123;
524
525 sub t044 ($, @) { $a.";" }
526 is prototype(\&t044), undef;
527 is eval("t044()"), undef;
528 like $@, qr/\AToo few arguments for subroutine at/;
529 is eval("t044(0)"), "123;";
530 is eval("t044(456)"), "123;";
531 is eval("t044(456, 789)"), "123;";
532 is eval("t044(456, 789, 987)"), "123;";
533 is eval("t044(456, 789, 987, 654)"), "123;";
534 is eval("t044(456, 789, 987, 654, 321)"), "123;";
535 is eval("t044(456, 789, 987, 654, 321, 111)"), "123;";
536 is $a, 123;
537
538 sub t049 ($a, %b) { $a.";".join("/", map { $_."=".$b{$_} } sort keys %b) }
539 is prototype(\&t049), undef;
540 is eval("t049()"), undef;
541 like $@, qr/\AToo few arguments for subroutine at/;
542 is eval("t049(222)"), "222;";
543 is eval("t049(222, 456)"), undef;
544 like $@, qr#\AOdd name/value argument for subroutine at#;
545 is eval("t049(222, 456, 789)"), "222;456=789";
546 is eval("t049(222, 456, 789, 987)"), undef;
547 like $@, qr#\AOdd name/value argument for subroutine at#;
548 is eval("t049(222, 456, 789, 987, 654)"), "222;456=789/987=654";
549 is eval("t049(222, 456, 789, 987, 654, 321)"), undef;
550 like $@, qr#\AOdd name/value argument for subroutine at#;
551 is eval("t049(222, 456, 789, 987, 654, 321, 111)"),
552     "222;321=111/456=789/987=654";
553 is $a, 123;
554
555 sub t051 ($a, $b, $c, @d) { "$a;$b;$c;".join("/", @d).";".scalar(@d) }
556 is prototype(\&t051), undef;
557 is eval("t051()"), undef;
558 like $@, qr/\AToo few arguments for subroutine at/;
559 is eval("t051(456)"), undef;
560 like $@, qr/\AToo few arguments for subroutine at/;
561 is eval("t051(456, 789)"), undef;
562 like $@, qr/\AToo few arguments for subroutine at/;
563 is eval("t051(456, 789, 987)"), "456;789;987;;0";
564 is eval("t051(456, 789, 987, 654)"), "456;789;987;654;1";
565 is eval("t051(456, 789, 987, 654, 321)"), "456;789;987;654/321;2";
566 is eval("t051(456, 789, 987, 654, 321, 111)"), "456;789;987;654/321/111;3";
567 is $a, 123;
568
569 sub t052 ($a, $b, %c) { "$a;$b;".join("/", map { $_."=".$c{$_} } sort keys %c) }
570 is prototype(\&t052), undef;
571 is eval("t052()"), undef;
572 like $@, qr/\AToo few arguments for subroutine at/;
573 is eval("t052(222)"), undef;
574 like $@, qr/\AToo few arguments for subroutine at/;
575 is eval("t052(222, 333)"), "222;333;";
576 is eval("t052(222, 333, 456)"), undef;
577 like $@, qr#\AOdd name/value argument for subroutine at#;
578 is eval("t052(222, 333, 456, 789)"), "222;333;456=789";
579 is eval("t052(222, 333, 456, 789, 987)"), undef;
580 like $@, qr#\AOdd name/value argument for subroutine at#;
581 is eval("t052(222, 333, 456, 789, 987, 654)"), "222;333;456=789/987=654";
582 is eval("t052(222, 333, 456, 789, 987, 654, 321)"), undef;
583 like $@, qr#\AOdd name/value argument for subroutine at#;
584 is eval("t052(222, 333, 456, 789, 987, 654, 321, 111)"),
585     "222;333;321=111/456=789/987=654";
586 is $a, 123;
587
588 sub t053 ($a, $b, $c, %d) {
589     "$a;$b;$c;".join("/", map { $_."=".$d{$_} } sort keys %d)
590 }
591 is prototype(\&t053), undef;
592 is eval("t053()"), undef;
593 like $@, qr/\AToo few arguments for subroutine at/;
594 is eval("t053(222)"), undef;
595 like $@, qr/\AToo few arguments for subroutine at/;
596 is eval("t053(222, 333)"), undef;
597 like $@, qr/\AToo few arguments for subroutine at/;
598 is eval("t053(222, 333, 444)"), "222;333;444;";
599 is eval("t053(222, 333, 444, 456)"), undef;
600 like $@, qr#\AOdd name/value argument for subroutine at#;
601 is eval("t053(222, 333, 444, 456, 789)"), "222;333;444;456=789";
602 is eval("t053(222, 333, 444, 456, 789, 987)"), undef;
603 like $@, qr#\AOdd name/value argument for subroutine at#;
604 is eval("t053(222, 333, 444, 456, 789, 987, 654)"),
605     "222;333;444;456=789/987=654";
606 is eval("t053(222, 333, 444, 456, 789, 987, 654, 321)"), undef;
607 like $@, qr#\AOdd name/value argument for subroutine at#;
608 is eval("t053(222, 333, 444, 456, 789, 987, 654, 321, 111)"),
609     "222;333;444;321=111/456=789/987=654";
610 is $a, 123;
611
612 sub t048 ($a = 222, @b) { $a.";".join("/", @b).";".scalar(@b) }
613 is prototype(\&t048), undef;
614 is eval("t048()"), "222;;0";
615 is eval("t048(0)"), "0;;0";
616 is eval("t048(456)"), "456;;0";
617 is eval("t048(456, 789)"), "456;789;1";
618 is eval("t048(456, 789, 987)"), "456;789/987;2";
619 is eval("t048(456, 789, 987, 654)"), "456;789/987/654;3";
620 is eval("t048(456, 789, 987, 654, 321)"), "456;789/987/654/321;4";
621 is eval("t048(456, 789, 987, 654, 321, 111)"), "456;789/987/654/321/111;5";
622 is $a, 123;
623
624 sub t054 ($a = 222, $b = 333, @c) { "$a;$b;".join("/", @c).";".scalar(@c) }
625 is prototype(\&t054), undef;
626 is eval("t054()"), "222;333;;0";
627 is eval("t054(456)"), "456;333;;0";
628 is eval("t054(456, 789)"), "456;789;;0";
629 is eval("t054(456, 789, 987)"), "456;789;987;1";
630 is eval("t054(456, 789, 987, 654)"), "456;789;987/654;2";
631 is eval("t054(456, 789, 987, 654, 321)"), "456;789;987/654/321;3";
632 is eval("t054(456, 789, 987, 654, 321, 111)"), "456;789;987/654/321/111;4";
633 is $a, 123;
634
635 sub t055 ($a = 222, $b = 333, $c = 444, @d) {
636     "$a;$b;$c;".join("/", @d).";".scalar(@d)
637 }
638 is prototype(\&t055), undef;
639 is eval("t055()"), "222;333;444;;0";
640 is eval("t055(456)"), "456;333;444;;0";
641 is eval("t055(456, 789)"), "456;789;444;;0";
642 is eval("t055(456, 789, 987)"), "456;789;987;;0";
643 is eval("t055(456, 789, 987, 654)"), "456;789;987;654;1";
644 is eval("t055(456, 789, 987, 654, 321)"), "456;789;987;654/321;2";
645 is eval("t055(456, 789, 987, 654, 321, 111)"), "456;789;987;654/321/111;3";
646 is $a, 123;
647
648 sub t050 ($a = 211, %b) { $a.";".join("/", map { $_."=".$b{$_} } sort keys %b) }
649 is prototype(\&t050), undef;
650 is eval("t050()"), "211;";
651 is eval("t050(222)"), "222;";
652 is eval("t050(222, 456)"), undef;
653 like $@, qr#\AOdd name/value argument for subroutine at#;
654 is eval("t050(222, 456, 789)"), "222;456=789";
655 is eval("t050(222, 456, 789, 987)"), undef;
656 like $@, qr#\AOdd name/value argument for subroutine at#;
657 is eval("t050(222, 456, 789, 987, 654)"), "222;456=789/987=654";
658 is eval("t050(222, 456, 789, 987, 654, 321)"), undef;
659 like $@, qr#\AOdd name/value argument for subroutine at#;
660 is eval("t050(222, 456, 789, 987, 654, 321, 111)"),
661     "222;321=111/456=789/987=654";
662 is $a, 123;
663
664 sub t056 ($a = 211, $b = 311, %c) {
665     "$a;$b;".join("/", map { $_."=".$c{$_} } sort keys %c)
666 }
667 is prototype(\&t056), undef;
668 is eval("t056()"), "211;311;";
669 is eval("t056(222)"), "222;311;";
670 is eval("t056(222, 333)"), "222;333;";
671 is eval("t056(222, 333, 456)"), undef;
672 like $@, qr#\AOdd name/value argument for subroutine at#;
673 is eval("t056(222, 333, 456, 789)"), "222;333;456=789";
674 is eval("t056(222, 333, 456, 789, 987)"), undef;
675 like $@, qr#\AOdd name/value argument for subroutine at#;
676 is eval("t056(222, 333, 456, 789, 987, 654)"), "222;333;456=789/987=654";
677 is eval("t056(222, 333, 456, 789, 987, 654, 321)"), undef;
678 like $@, qr#\AOdd name/value argument for subroutine at#;
679 is eval("t056(222, 333, 456, 789, 987, 654, 321, 111)"),
680     "222;333;321=111/456=789/987=654";
681 is $a, 123;
682
683 sub t057 ($a = 211, $b = 311, $c = 411, %d) {
684     "$a;$b;$c;".join("/", map { $_."=".$d{$_} } sort keys %d)
685 }
686 is prototype(\&t057), undef;
687 is eval("t057()"), "211;311;411;";
688 is eval("t057(222)"), "222;311;411;";
689 is eval("t057(222, 333)"), "222;333;411;";
690 is eval("t057(222, 333, 444)"), "222;333;444;";
691 is eval("t057(222, 333, 444, 456)"), undef;
692 like $@, qr#\AOdd name/value argument for subroutine at#;
693 is eval("t057(222, 333, 444, 456, 789)"), "222;333;444;456=789";
694 is eval("t057(222, 333, 444, 456, 789, 987)"), undef;
695 like $@, qr#\AOdd name/value argument for subroutine at#;
696 is eval("t057(222, 333, 444, 456, 789, 987, 654)"),
697     "222;333;444;456=789/987=654";
698 is eval("t057(222, 333, 444, 456, 789, 987, 654, 321)"), undef;
699 like $@, qr#\AOdd name/value argument for subroutine at#;
700 is eval("t057(222, 333, 444, 456, 789, 987, 654, 321, 111)"),
701     "222;333;444;321=111/456=789/987=654";
702 is $a, 123;
703
704 sub t058 ($a, $b = 333, @c) { "$a;$b;".join("/", @c).";".scalar(@c) }
705 is prototype(\&t058), undef;
706 is eval("t058()"), undef;
707 like $@, qr/\AToo few arguments for subroutine at/;
708 is eval("t058(456)"), "456;333;;0";
709 is eval("t058(456, 789)"), "456;789;;0";
710 is eval("t058(456, 789, 987)"), "456;789;987;1";
711 is eval("t058(456, 789, 987, 654)"), "456;789;987/654;2";
712 is eval("t058(456, 789, 987, 654, 321)"), "456;789;987/654/321;3";
713 is eval("t058(456, 789, 987, 654, 321, 111)"), "456;789;987/654/321/111;4";
714 is $a, 123;
715
716 eval "#line 8 foo\nsub t059 (\@a, \$b) { }";
717 is $@, "Slurpy parameter not last at foo line 8\.\n";
718
719 eval "#line 8 foo\nsub t060 (\@a, \$b = 222) { }";
720 is $@, "Slurpy parameter not last at foo line 8\.\n";
721
722 eval "#line 8 foo\nsub t061 (\@a, \@b) { }";
723 is $@, "Slurpy parameter not last at foo line 8\.\n";
724
725 eval "#line 8 foo\nsub t062 (\@a, \%b) { }";
726 is $@, "Slurpy parameter not last at foo line 8\.\n";
727
728 eval "#line 8 foo\nsub t063 (\@, \$b) { }";
729 is $@, "Slurpy parameter not last at foo line 8\.\n";
730
731 eval "#line 8 foo\nsub t064 (\@, \$b = 222) { }";
732 is $@, "Slurpy parameter not last at foo line 8\.\n";
733
734 eval "#line 8 foo\nsub t065 (\@, \@b) { }";
735 is $@, "Slurpy parameter not last at foo line 8\.\n";
736
737 eval "#line 8 foo\nsub t066 (\@, \%b) { }";
738 is $@, "Slurpy parameter not last at foo line 8\.\n";
739
740 eval "#line 8 foo\nsub t067 (\@a, \$) { }";
741 is $@, "Slurpy parameter not last at foo line 8\.\n";
742
743 eval "#line 8 foo\nsub t068 (\@a, \$ = 222) { }";
744 is $@, "Slurpy parameter not last at foo line 8\.\n";
745
746 eval "#line 8 foo\nsub t069 (\@a, \@) { }";
747 is $@, "Slurpy parameter not last at foo line 8\.\n";
748
749 eval "#line 8 foo\nsub t070 (\@a, \%) { }";
750 is $@, "Slurpy parameter not last at foo line 8\.\n";
751
752 eval "#line 8 foo\nsub t071 (\@, \$) { }";
753 is $@, "Slurpy parameter not last at foo line 8\.\n";
754
755 eval "#line 8 foo\nsub t072 (\@, \$ = 222) { }";
756 is $@, "Slurpy parameter not last at foo line 8\.\n";
757
758 eval "#line 8 foo\nsub t073 (\@, \@) { }";
759 is $@, "Slurpy parameter not last at foo line 8\.\n";
760
761 eval "#line 8 foo\nsub t074 (\@, \%) { }";
762 is $@, "Slurpy parameter not last at foo line 8\.\n";
763
764 eval "#line 8 foo\nsub t075 (\%a, \$b) { }";
765 is $@, "Slurpy parameter not last at foo line 8\.\n";
766
767 eval "#line 8 foo\nsub t076 (\%, \$b) { }";
768 is $@, "Slurpy parameter not last at foo line 8\.\n";
769
770 eval "#line 8 foo\nsub t077 (\$a, \@b, \$c) { }";
771 is $@, "Slurpy parameter not last at foo line 8\.\n";
772
773 eval "#line 8 foo\nsub t078 (\$a, \%b, \$c) { }";
774 is $@, "Slurpy parameter not last at foo line 8\.\n";
775
776 eval "#line 8 foo\nsub t079 (\$a, \@b, \$c, \$d) { }";
777 is $@, "Slurpy parameter not last at foo line 8\.\n";
778
779 sub t080 ($a,,, $b) { $a.$b }
780 is prototype(\&t080), undef;
781 is eval("t080()"), undef;
782 like $@, qr/\AToo few arguments for subroutine at/;
783 is eval("t080(456)"), undef;
784 like $@, qr/\AToo few arguments for subroutine at/;
785 is eval("t080(456, 789)"), "456789";
786 is eval("t080(456, 789, 987)"), undef;
787 like $@, qr/\AToo many arguments for subroutine at/;
788 is eval("t080(456, 789, 987, 654)"), undef;
789 like $@, qr/\AToo many arguments for subroutine at/;
790 is $a, 123;
791
792 sub t081 ($a, $b,,) { $a.$b }
793 is prototype(\&t081), undef;
794 is eval("t081()"), undef;
795 like $@, qr/\AToo few arguments for subroutine at/;
796 is eval("t081(456)"), undef;
797 like $@, qr/\AToo few arguments for subroutine at/;
798 is eval("t081(456, 789)"), "456789";
799 is eval("t081(456, 789, 987)"), undef;
800 like $@, qr/\AToo many arguments for subroutine at/;
801 is eval("t081(456, 789, 987, 654)"), undef;
802 like $@, qr/\AToo many arguments for subroutine at/;
803 is $a, 123;
804
805 eval "#line 8 foo\nsub t082 (, \$a) { }";
806 like $@, qr/\AParse error at foo line 8\.\n/;
807
808 eval "#line 8 foo\nsub t083 (,) { }";
809 like $@, qr/\AParse error at foo line 8\.\n/;
810
811 sub t084($a,$b){ $a.$b }
812 is prototype(\&t084), undef;
813 is eval("t084()"), undef;
814 like $@, qr/\AToo few arguments for subroutine at/;
815 is eval("t084(456)"), undef;
816 like $@, qr/\AToo few arguments for subroutine at/;
817 is eval("t084(456, 789)"), "456789";
818 is eval("t084(456, 789, 987)"), undef;
819 like $@, qr/\AToo many arguments for subroutine at/;
820 is eval("t084(456, 789, 987, 654)"), undef;
821 like $@, qr/\AToo many arguments for subroutine at/;
822 is $a, 123;
823
824 sub t085
825     (
826     $
827     a
828     ,
829     ,
830     $
831     b
832     =
833     333
834     ,
835     ,
836     )
837     { $a.$b }
838 is prototype(\&t085), undef;
839 is eval("t085()"), undef;
840 like $@, qr/\AToo few arguments for subroutine at/;
841 is eval("t085(456)"), "456333";
842 is eval("t085(456, 789)"), "456789";
843 is eval("t085(456, 789, 987)"), undef;
844 like $@, qr/\AToo many arguments for subroutine at/;
845 is eval("t085(456, 789, 987, 654)"), undef;
846 like $@, qr/\AToo many arguments for subroutine at/;
847 is $a, 123;
848
849 sub t086
850     ( #foo)))
851     $ #foo)))
852     a #foo)))
853     , #foo)))
854     , #foo)))
855     $ #foo)))
856     b #foo)))
857     = #foo)))
858     333 #foo)))
859     , #foo)))
860     , #foo)))
861     ) #foo)))
862     { $a.$b }
863 is prototype(\&t086), undef;
864 is eval("t086()"), undef;
865 like $@, qr/\AToo few arguments for subroutine at/;
866 is eval("t086(456)"), "456333";
867 is eval("t086(456, 789)"), "456789";
868 is eval("t086(456, 789, 987)"), undef;
869 like $@, qr/\AToo many arguments for subroutine at/;
870 is eval("t086(456, 789, 987, 654)"), undef;
871 like $@, qr/\AToo many arguments for subroutine at/;
872 is $a, 123;
873
874 sub t087
875     (#foo)))
876     $ #foo)))
877     a#foo)))
878     ,#foo)))
879     ,#foo)))
880     $ #foo)))
881     b#foo)))
882     =#foo)))
883     333#foo)))
884     ,#foo)))
885     ,#foo)))
886     )#foo)))
887     { $a.$b }
888 is prototype(\&t087), undef;
889 is eval("t087()"), undef;
890 like $@, qr/\AToo few arguments for subroutine at/;
891 is eval("t087(456)"), "456333";
892 is eval("t087(456, 789)"), "456789";
893 is eval("t087(456, 789, 987)"), undef;
894 like $@, qr/\AToo many arguments for subroutine at/;
895 is eval("t087(456, 789, 987, 654)"), undef;
896 like $@, qr/\AToo many arguments for subroutine at/;
897 is $a, 123;
898
899 eval "#line 8 foo\nsub t088 (\$ #foo\na) { }";
900 is $@, "";
901
902 eval "#line 8 foo\nsub t089 (\$#foo\na) { }";
903 like $@, qr/\AParse error at foo line 8\.\n/;
904
905 eval "#line 8 foo\nsub t090 (\@ #foo\na) { }";
906 is $@, "";
907
908 eval "#line 8 foo\nsub t091 (\@#foo\na) { }";
909 like $@, qr/\AParse error at foo line 8\.\n/;
910
911 eval "#line 8 foo\nsub t092 (\% #foo\na) { }";
912 is $@, "";
913
914 eval "#line 8 foo\nsub t093 (\%#foo\na) { }";
915 like $@, qr/\AParse error at foo line 8\.\n/;
916
917 eval "#line 8 foo\nsub t094 (123) { }";
918 like $@, qr/\AParse error at foo line 8\.\n/;
919
920 eval "#line 8 foo\nsub t095 (\$a, 123) { }";
921 like $@, qr/\AParse error at foo line 8\.\n/;
922
923 eval "#line 8 foo\nsub t096 (\$a 123) { }";
924 like $@, qr/\AParse error at foo line 8\.\n/;
925
926 eval "#line 8 foo\nsub t097 (\$a { }) { }";
927 like $@, qr/\AParse error at foo line 8\.\n/;
928
929 eval "#line 8 foo\nsub t098 (\$a; \$b) { }";
930 like $@, qr/\AParse error at foo line 8\.\n/;
931
932 eval "#line 8 foo\nsub t099 (\$\$) { }";
933 like $@, qr/\AParse error at foo line 8\.\n/;
934
935 no warnings "experimental::lexical_topic";
936 sub t100 ($_) { "$::_/$_" }
937 is prototype(\&t100), undef;
938 $_ = "___";
939 is eval("t100()"), undef;
940 like $@, qr/\AToo few arguments for subroutine at/;
941 $_ = "___";
942 is eval("t100(0)"), "___/0";
943 $_ = "___";
944 is eval("t100(456)"), "___/456";
945 $_ = "___";
946 is eval("t100(456, 789)"), undef;
947 like $@, qr/\AToo many arguments for subroutine at/;
948 $_ = "___";
949 is eval("t100(456, 789, 987)"), undef;
950 like $@, qr/\AToo many arguments for subroutine at/;
951 is $a, 123;
952
953 eval "#line 8 foo\nsub t101 (\@_) { }";
954 like $@, qr/\ACan't use global \@_ in "my" at foo line 8/;
955
956 eval "#line 8 foo\nsub t102 (\%_) { }";
957 like $@, qr/\ACan't use global \%_ in "my" at foo line 8/;
958
959 my $t103 = sub ($a) { $a || "z" };
960 is prototype($t103), undef;
961 is eval("\$t103->()"), undef;
962 like $@, qr/\AToo few arguments for subroutine at/;
963 is eval("\$t103->(0)"), "z";
964 is eval("\$t103->(456)"), 456;
965 is eval("\$t103->(456, 789)"), undef;
966 like $@, qr/\AToo many arguments for subroutine at/;
967 is eval("\$t103->(456, 789, 987)"), undef;
968 like $@, qr/\AToo many arguments for subroutine at/;
969 is $a, 123;
970
971 my $t118 = sub :prototype($) ($a) { $a || "z" };
972 is prototype($t118), "\$";
973 is eval("\$t118->()"), undef;
974 like $@, qr/\AToo few arguments for subroutine at/;
975 is eval("\$t118->(0)"), "z";
976 is eval("\$t118->(456)"), 456;
977 is eval("\$t118->(456, 789)"), undef;
978 like $@, qr/\AToo many arguments for subroutine at/;
979 is eval("\$t118->(456, 789, 987)"), undef;
980 like $@, qr/\AToo many arguments for subroutine at/;
981 is $a, 123;
982
983 sub t033 ($a = sub ($a) { $a."z" }) { $a->("a")."y" }
984 is prototype(\&t033), undef;
985 is eval("t033()"), "azy";
986 is eval("t033(sub { \"x\".\$_[0].\"x\" })"), "xaxy";
987 is eval("t033(sub { \"x\".\$_[0].\"x\" }, 789)"), undef;
988 like $@, qr/\AToo many arguments for subroutine at/;
989 is $a, 123;
990
991 sub t104 :method ($a) { $a || "z" }
992 is prototype(\&t104), undef;
993 is eval("t104()"), undef;
994 like $@, qr/\AToo few arguments for subroutine at/;
995 is eval("t104(0)"), "z";
996 is eval("t104(456)"), 456;
997 is eval("t104(456, 789)"), undef;
998 like $@, qr/\AToo many arguments for subroutine at/;
999 is eval("t104(456, 789, 987)"), undef;
1000 like $@, qr/\AToo many arguments for subroutine at/;
1001 is $a, 123;
1002
1003 sub t105 :prototype($) ($a) { $a || "z" }
1004 is prototype(\&t105), "\$";
1005 is eval("t105()"), undef;
1006 like $@, qr/\ANot enough arguments for main::t105 /;
1007 is eval("t105(0)"), "z";
1008 is eval("t105(456)"), 456;
1009 is eval("t105(456, 789)"), undef;
1010 like $@, qr/\AToo many arguments for main::t105 at/;
1011 is eval("t105(456, 789, 987)"), undef;
1012 like $@, qr/\AToo many arguments for main::t105 at/;
1013 is $a, 123;
1014
1015 sub t106 :prototype(@) ($a) { $a || "z" }
1016 is prototype(\&t106), "\@";
1017 is eval("t106()"), undef;
1018 like $@, qr/\AToo few arguments for subroutine at/;
1019 is eval("t106(0)"), "z";
1020 is eval("t106(456)"), 456;
1021 is eval("t106(456, 789)"), undef;
1022 like $@, qr/\AToo many arguments for subroutine at/;
1023 is eval("t106(456, 789, 987)"), undef;
1024 like $@, qr/\AToo many arguments for subroutine at/;
1025 is $a, 123;
1026
1027 eval "#line 8 foo\nsub t107 (\$a) :method { }";
1028 isnt $@, "";
1029
1030 eval "#line 8 foo\nsub t108 (\$a) :prototype(\$) { }";
1031 isnt $@, "";
1032
1033 sub t109 { }
1034 is prototype(\&t109), undef;
1035 is scalar(@{[ t109() ]}), 0;
1036 is scalar(t109()), undef;
1037
1038 sub t110 () { }
1039 is prototype(\&t110), undef;
1040 is scalar(@{[ t110() ]}), 0;
1041 is scalar(t110()), undef;
1042
1043 sub t111 ($a) { }
1044 is prototype(\&t111), undef;
1045 is scalar(@{[ t111(222) ]}), 0;
1046 is scalar(t111(222)), undef;
1047
1048 sub t112 ($) { }
1049 is prototype(\&t112), undef;
1050 is scalar(@{[ t112(222) ]}), 0;
1051 is scalar(t112(222)), undef;
1052
1053 sub t114 ($a = undef) { }
1054 is prototype(\&t114), undef;
1055 is scalar(@{[ t114() ]}), 0;
1056 is scalar(t114()), undef;
1057 is scalar(@{[ t114(333) ]}), 0;
1058 is scalar(t114(333)), undef;
1059
1060 sub t113 ($a = 222) { }
1061 is prototype(\&t113), undef;
1062 is scalar(@{[ t113() ]}), 0;
1063 is scalar(t113()), undef;
1064 is scalar(@{[ t113(333) ]}), 0;
1065 is scalar(t113(333)), undef;
1066
1067 sub t115 ($a = do { $z++; 222 }) { }
1068 is prototype(\&t115), undef;
1069 $z = 0;
1070 is scalar(@{[ t115() ]}), 0;
1071 is $z, 1;
1072 is scalar(t115()), undef;
1073 is $z, 2;
1074 is scalar(@{[ t115(333) ]}), 0;
1075 is scalar(t115(333)), undef;
1076 is $z, 2;
1077
1078 sub t116 (@a) { }
1079 is prototype(\&t116), undef;
1080 is scalar(@{[ t116() ]}), 0;
1081 is scalar(t116()), undef;
1082 is scalar(@{[ t116(333) ]}), 0;
1083 is scalar(t116(333)), undef;
1084
1085 sub t117 (%a) { }
1086 is prototype(\&t117), undef;
1087 is scalar(@{[ t117() ]}), 0;
1088 is scalar(t117()), undef;
1089 is scalar(@{[ t117(333, 444) ]}), 0;
1090 is scalar(t117(333, 444)), undef;
1091
1092 1;