5e6459e551259c078d455c9bac53dd402988e3a2
[perl.git] / t / op / signatures.t
1 #!perl
2
3 BEGIN {
4     chdir 't';
5     @INC = '../lib';
6     require './test.pl';
7 }
8 plan 880;
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 t120 ($a = $_) { $a // "z" }
273 is prototype(\&t120), undef;
274 $_ = "___";
275 is eval("t120()"), "___";
276 $_ = "___";
277 is eval("t120(undef)"), "z";
278 $_ = "___";
279 is eval("t120(0)"), 0;
280 $_ = "___";
281 is eval("t120(456)"), 456;
282 $_ = "___";
283 is eval("t120(456, 789)"), undef;
284 like $@, qr/\AToo many arguments for subroutine at/;
285 is $a, 123;
286
287 sub t121 ($a = caller) { $a // "z" }
288 is prototype(\&t121), undef;
289 is eval("t121()"), "main";
290 is eval("t121(undef)"), "z";
291 is eval("t121(0)"), 0;
292 is eval("t121(456)"), 456;
293 is eval("t121(456, 789)"), undef;
294 like $@, qr/\AToo many arguments for subroutine at/;
295 is eval("package T121::Z; ::t121()"), "T121::Z";
296 is eval("package T121::Z; ::t121(undef)"), "z";
297 is eval("package T121::Z; ::t121(0)"), 0;
298 is eval("package T121::Z; ::t121(456)"), 456;
299 is eval("package T121::Z; ::t121(456, 789)"), undef;
300 like $@, qr/\AToo many arguments for subroutine at/;
301 is $a, 123;
302
303 sub t129 ($a = return 222) { $a."x" }
304 is prototype(\&t129), undef;
305 is eval("t129()"), "222";
306 is eval("t129(0)"), "0x";
307 is eval("t129(456)"), "456x";
308 is eval("t129(456, 789)"), undef;
309 like $@, qr/\AToo many arguments for subroutine at/;
310 is $a, 123;
311
312 use feature "current_sub";
313 sub t122 ($c = 5, $r = $c > 0 ? __SUB__->($c - 1) : "") { $c.$r }
314 is prototype(\&t122), undef;
315 is eval("t122()"), "543210";
316 is eval("t122(0)"), "0";
317 is eval("t122(1)"), "10";
318 is eval("t122(5)"), "543210";
319 is eval("t122(5, 789)"), "5789";
320 is eval("t122(5, 789, 987)"), undef;
321 like $@, qr/\AToo many arguments for subroutine at/;
322 is $a, 123;
323
324 sub t123 ($list = wantarray) { $list ? "list" : "scalar" }
325 is prototype(\&t123), undef;
326 is eval("scalar(t123())"), "scalar";
327 is eval("(t123())[0]"), "list";
328 is eval("scalar(t123(0))"), "scalar";
329 is eval("(t123(0))[0]"), "scalar";
330 is eval("scalar(t123(1))"), "list";
331 is eval("(t123(1))[0]"), "list";
332 is eval("t123(456, 789)"), undef;
333 like $@, qr/\AToo many arguments for subroutine at/;
334 is $a, 123;
335
336 sub t124 ($b = (local $a = $a + 1)) { "$a/$b" }
337 is prototype(\&t124), undef;
338 is eval("t124()"), "124/124";
339 is $a, 123;
340 is eval("t124(456)"), "123/456";
341 is $a, 123;
342 is eval("t124(456, 789)"), undef;
343 like $@, qr/\AToo many arguments for subroutine at/;
344 is $a, 123;
345
346 sub t125 ($c = (our $t125_counter)++) { $c }
347 is prototype(\&t125), undef;
348 is eval("t125()"), 0;
349 is eval("t125()"), 1;
350 is eval("t125()"), 2;
351 is eval("t125(456)"), 456;
352 is eval("t125(789)"), 789;
353 is eval("t125()"), 3;
354 is eval("t125()"), 4;
355 is eval("t125(456, 789)"), undef;
356 like $@, qr/\AToo many arguments for subroutine at/;
357 is $a, 123;
358
359 use feature "state";
360 sub t126 ($c = (state $s = $z++)) { $c }
361 is prototype(\&t126), undef;
362 $z = 222;
363 is eval("t126(456)"), 456;
364 is $z, 222;
365 is eval("t126()"), 222;
366 is $z, 223;
367 is eval("t126(456)"), 456;
368 is $z, 223;
369 is eval("t126()"), 222;
370 is $z, 223;
371 is eval("t126(456, 789)"), undef;
372 like $@, qr/\AToo many arguments for subroutine at/;
373 is $z, 223;
374 is $a, 123;
375
376 sub t127 ($c = do { state $s = $z++; $s++ }) { $c }
377 is prototype(\&t127), undef;
378 $z = 222;
379 is eval("t127(456)"), 456;
380 is $z, 222;
381 is eval("t127()"), 222;
382 is $z, 223;
383 is eval("t127()"), 223;
384 is eval("t127()"), 224;
385 is $z, 223;
386 is eval("t127(456)"), 456;
387 is eval("t127(789)"), 789;
388 is eval("t127()"), 225;
389 is eval("t127()"), 226;
390 is eval("t127(456, 789)"), undef;
391 like $@, qr/\AToo many arguments for subroutine at/;
392 is $z, 223;
393 is $a, 123;
394
395 sub t037 ($a = 222, $b = $a."x") { "$a/$b" }
396 is prototype(\&t037), undef;
397 is eval("t037()"), "222/222x";
398 is eval("t037(0)"), "0/0x";
399 is eval("t037(456)"), "456/456x";
400 is eval("t037(456, 789)"), "456/789";
401 is eval("t037(456, 789, 987)"), undef;
402 like $@, qr/\AToo many arguments for subroutine at/;
403 is $a, 123;
404
405 sub t128 ($a = 222, $b = ($a = 333)) { "$a/$b" }
406 is prototype(\&t128), undef;
407 is eval("t128()"), "333/333";
408 is eval("t128(0)"), "333/333";
409 is eval("t128(456)"), "333/333";
410 is eval("t128(456, 789)"), "456/789";
411 is eval("t128(456, 789, 987)"), undef;
412 like $@, qr/\AToo many arguments for subroutine at/;
413 is $a, 123;
414
415 sub t130 { join(",", @_).";".scalar(@_) }
416 sub t131 ($a = 222, $b = goto &t130) { "$a/$b" }
417 is prototype(\&t131), undef;
418 is eval("t131()"), ";0";
419 is eval("t131(0)"), "0;1";
420 is eval("t131(456)"), "456;1";
421 is eval("t131(456, 789)"), "456/789";
422 is eval("t131(456, 789, 987)"), undef;
423 like $@, qr/\AToo many arguments for subroutine at/;
424 is $a, 123;
425
426 eval "#line 8 foo\nsub t024 (\$a =) { }";
427 is $@, "Optional parameter lacks default expression at foo line 8\.\n";
428
429 sub t025 ($ = undef) { $a // "z" }
430 is prototype(\&t025), undef;
431 is eval("t025()"), 123;
432 is eval("t025(0)"), 123;
433 is eval("t025(456)"), 123;
434 is eval("t025(456, 789)"), undef;
435 like $@, qr/\AToo many arguments for subroutine at/;
436 is eval("t025(456, 789, 987)"), undef;
437 like $@, qr/\AToo many arguments for subroutine at/;
438 is eval("t025(456, 789, 987, 654)"), undef;
439 like $@, qr/\AToo many arguments for subroutine at/;
440 is $a, 123;
441
442 sub t026 ($ = 222) { $a // "z" }
443 is prototype(\&t026), undef;
444 is eval("t026()"), 123;
445 is eval("t026(0)"), 123;
446 is eval("t026(456)"), 123;
447 is eval("t026(456, 789)"), undef;
448 like $@, qr/\AToo many arguments for subroutine at/;
449 is eval("t026(456, 789, 987)"), undef;
450 like $@, qr/\AToo many arguments for subroutine at/;
451 is eval("t026(456, 789, 987, 654)"), undef;
452 like $@, qr/\AToo many arguments for subroutine at/;
453 is $a, 123;
454
455 sub t032 ($ = do { $z++; 222 }) { $a // "z" }
456 $z = 0;
457 is prototype(\&t032), undef;
458 is eval("t032()"), 123;
459 is $z, 1;
460 is eval("t032(0)"), 123;
461 is eval("t032(456)"), 123;
462 is eval("t032(456, 789)"), undef;
463 like $@, qr/\AToo many arguments for subroutine at/;
464 is eval("t032(456, 789, 987)"), undef;
465 like $@, qr/\AToo many arguments for subroutine at/;
466 is eval("t032(456, 789, 987, 654)"), undef;
467 like $@, qr/\AToo many arguments for subroutine at/;
468 is $z, 1;
469 is $a, 123;
470
471 sub t027 ($ =) { $a // "z" }
472 is prototype(\&t027), undef;
473 is eval("t027()"), 123;
474 is eval("t027(0)"), 123;
475 is eval("t027(456)"), 123;
476 is eval("t027(456, 789)"), undef;
477 like $@, qr/\AToo many arguments for subroutine at/;
478 is eval("t027(456, 789, 987)"), undef;
479 like $@, qr/\AToo many arguments for subroutine at/;
480 is eval("t027(456, 789, 987, 654)"), undef;
481 like $@, qr/\AToo many arguments for subroutine at/;
482 is $a, 123;
483
484 sub t119 ($ =, $a = 333) { $a // "z" }
485 is prototype(\&t119), undef;
486 is eval("t119()"), 333;
487 is eval("t119(0)"), 333;
488 is eval("t119(456)"), 333;
489 is eval("t119(456, 789)"), 789;
490 is eval("t119(456, 789, 987)"), undef;
491 like $@, qr/\AToo many arguments for subroutine at/;
492 is eval("t119(456, 789, 987, 654)"), undef;
493 like $@, qr/\AToo many arguments for subroutine at/;
494 is $a, 123;
495
496 sub t028 ($a, $b = 333) { "$a/$b" }
497 is prototype(\&t028), undef;
498 is eval("t028()"), undef;
499 like $@, qr/\AToo few arguments for subroutine at/;
500 is eval("t028(0)"), "0/333";
501 is eval("t028(456)"), "456/333";
502 is eval("t028(456, 789)"), "456/789";
503 is eval("t028(456, 789, 987)"), undef;
504 like $@, qr/\AToo many arguments for subroutine at/;
505 is $a, 123;
506
507 sub t045 ($a, $ = 333) { "$a/" }
508 is prototype(\&t045), undef;
509 is eval("t045()"), undef;
510 like $@, qr/\AToo few arguments for subroutine at/;
511 is eval("t045(0)"), "0/";
512 is eval("t045(456)"), "456/";
513 is eval("t045(456, 789)"), "456/";
514 is eval("t045(456, 789, 987)"), undef;
515 like $@, qr/\AToo many arguments for subroutine at/;
516 is $a, 123;
517
518 sub t046 ($, $b = 333) { "$a/$b" }
519 is prototype(\&t046), undef;
520 is eval("t046()"), undef;
521 like $@, qr/\AToo few arguments for subroutine at/;
522 is eval("t046(0)"), "123/333";
523 is eval("t046(456)"), "123/333";
524 is eval("t046(456, 789)"), "123/789";
525 is eval("t046(456, 789, 987)"), undef;
526 like $@, qr/\AToo many arguments for subroutine at/;
527 is $a, 123;
528
529 sub t047 ($, $ = 333) { "$a/" }
530 is prototype(\&t047), undef;
531 is eval("t047()"), undef;
532 like $@, qr/\AToo few arguments for subroutine at/;
533 is eval("t047(0)"), "123/";
534 is eval("t047(456)"), "123/";
535 is eval("t047(456, 789)"), "123/";
536 is eval("t047(456, 789, 987)"), undef;
537 like $@, qr/\AToo many arguments for subroutine at/;
538 is $a, 123;
539
540 sub t029 ($a, $b, $c = 222, $d = 333) { "$a/$b/$c/$d" }
541 is prototype(\&t029), undef;
542 is eval("t029()"), undef;
543 like $@, qr/\AToo few arguments for subroutine at/;
544 is eval("t029(0)"), undef;
545 like $@, qr/\AToo few arguments for subroutine at/;
546 is eval("t029(456)"), undef;
547 like $@, qr/\AToo few arguments for subroutine at/;
548 is eval("t029(456, 789)"), "456/789/222/333";
549 is eval("t029(456, 789, 987)"), "456/789/987/333";
550 is eval("t029(456, 789, 987, 654)"), "456/789/987/654";
551 is eval("t029(456, 789, 987, 654, 321)"), undef;
552 like $@, qr/\AToo many arguments for subroutine at/;
553 is eval("t029(456, 789, 987, 654, 321, 111)"), undef;
554 like $@, qr/\AToo many arguments for subroutine at/;
555 is $a, 123;
556
557 sub t038 ($a, $b = $a."x") { "$a/$b" }
558 is prototype(\&t038), undef;
559 is eval("t038()"), undef;
560 like $@, qr/\AToo few arguments for subroutine at/;
561 is eval("t038(0)"), "0/0x";
562 is eval("t038(456)"), "456/456x";
563 is eval("t038(456, 789)"), "456/789";
564 is eval("t038(456, 789, 987)"), undef;
565 like $@, qr/\AToo many arguments for subroutine at/;
566 is $a, 123;
567
568 eval "#line 8 foo\nsub t030 (\$a = 222, \$b) { }";
569 is $@, "Mandatory parameter follows optional parameter at foo line 8\.\n";
570
571 eval "#line 8 foo\nsub t031 (\$a = 222, \$b = 333, \$c, \$d) { }";
572 is $@, "Mandatory parameter follows optional parameter at foo line 8\.\n";
573
574 sub t034 (@abc) { join("/", @abc).";".scalar(@abc) }
575 is prototype(\&t034), undef;
576 is eval("t034()"), ";0";
577 is eval("t034(0)"), "0;1";
578 is eval("t034(456)"), "456;1";
579 is eval("t034(456, 789)"), "456/789;2";
580 is eval("t034(456, 789, 987)"), "456/789/987;3";
581 is eval("t034(456, 789, 987, 654)"), "456/789/987/654;4";
582 is eval("t034(456, 789, 987, 654, 321)"), "456/789/987/654/321;5";
583 is eval("t034(456, 789, 987, 654, 321, 111)"), "456/789/987/654/321/111;6";
584 is $a, 123;
585
586 sub t035 (@) { $a }
587 is prototype(\&t035), undef;
588 is eval("t035()"), 123;
589 is eval("t035(0)"), 123;
590 is eval("t035(456)"), 123;
591 is eval("t035(456, 789)"), 123;
592 is eval("t035(456, 789, 987)"), 123;
593 is eval("t035(456, 789, 987, 654)"), 123;
594 is eval("t035(456, 789, 987, 654, 321)"), 123;
595 is eval("t035(456, 789, 987, 654, 321, 111)"), 123;
596 is $a, 123;
597
598 sub t039 (%abc) { join("/", map { $_."=".$abc{$_} } sort keys %abc) }
599 is prototype(\&t039), undef;
600 is eval("t039()"), "";
601 is eval("t039(0)"), undef;
602 like $@, qr#\AOdd name/value argument for subroutine at#;
603 is eval("t039(456)"), undef;
604 like $@, qr#\AOdd name/value argument for subroutine at#;
605 is eval("t039(456, 789)"), "456=789";
606 is eval("t039(456, 789, 987)"), undef;
607 like $@, qr#\AOdd name/value argument for subroutine at#;
608 is eval("t039(456, 789, 987, 654)"), "456=789/987=654";
609 is eval("t039(456, 789, 987, 654, 321)"), undef;
610 like $@, qr#\AOdd name/value argument for subroutine at#;
611 is eval("t039(456, 789, 987, 654, 321, 111)"), "321=111/456=789/987=654";
612 is $a, 123;
613
614 sub t040 (%) { $a }
615 is prototype(\&t040), undef;
616 is eval("t040()"), 123;
617 is eval("t040(0)"), undef;
618 like $@, qr#\AOdd name/value argument for subroutine at#;
619 is eval("t040(456)"), undef;
620 like $@, qr#\AOdd name/value argument for subroutine at#;
621 is eval("t040(456, 789)"), 123;
622 is eval("t040(456, 789, 987)"), undef;
623 like $@, qr#\AOdd name/value argument for subroutine at#;
624 is eval("t040(456, 789, 987, 654)"), 123;
625 is eval("t040(456, 789, 987, 654, 321)"), undef;
626 like $@, qr#\AOdd name/value argument for subroutine at#;
627 is eval("t040(456, 789, 987, 654, 321, 111)"), 123;
628 is $a, 123;
629
630 sub t041 ($a, @b) { $a.";".join("/", @b) }
631 is prototype(\&t041), undef;
632 is eval("t041()"), undef;
633 like $@, qr/\AToo few arguments for subroutine at/;
634 is eval("t041(0)"), "0;";
635 is eval("t041(456)"), "456;";
636 is eval("t041(456, 789)"), "456;789";
637 is eval("t041(456, 789, 987)"), "456;789/987";
638 is eval("t041(456, 789, 987, 654)"), "456;789/987/654";
639 is eval("t041(456, 789, 987, 654, 321)"), "456;789/987/654/321";
640 is eval("t041(456, 789, 987, 654, 321, 111)"), "456;789/987/654/321/111";
641 is $a, 123;
642
643 sub t042 ($a, @) { $a.";" }
644 is prototype(\&t042), undef;
645 is eval("t042()"), undef;
646 like $@, qr/\AToo few arguments for subroutine at/;
647 is eval("t042(0)"), "0;";
648 is eval("t042(456)"), "456;";
649 is eval("t042(456, 789)"), "456;";
650 is eval("t042(456, 789, 987)"), "456;";
651 is eval("t042(456, 789, 987, 654)"), "456;";
652 is eval("t042(456, 789, 987, 654, 321)"), "456;";
653 is eval("t042(456, 789, 987, 654, 321, 111)"), "456;";
654 is $a, 123;
655
656 sub t043 ($, @b) { $a.";".join("/", @b) }
657 is prototype(\&t043), undef;
658 is eval("t043()"), undef;
659 like $@, qr/\AToo few arguments for subroutine at/;
660 is eval("t043(0)"), "123;";
661 is eval("t043(456)"), "123;";
662 is eval("t043(456, 789)"), "123;789";
663 is eval("t043(456, 789, 987)"), "123;789/987";
664 is eval("t043(456, 789, 987, 654)"), "123;789/987/654";
665 is eval("t043(456, 789, 987, 654, 321)"), "123;789/987/654/321";
666 is eval("t043(456, 789, 987, 654, 321, 111)"), "123;789/987/654/321/111";
667 is $a, 123;
668
669 sub t044 ($, @) { $a.";" }
670 is prototype(\&t044), undef;
671 is eval("t044()"), undef;
672 like $@, qr/\AToo few arguments for subroutine at/;
673 is eval("t044(0)"), "123;";
674 is eval("t044(456)"), "123;";
675 is eval("t044(456, 789)"), "123;";
676 is eval("t044(456, 789, 987)"), "123;";
677 is eval("t044(456, 789, 987, 654)"), "123;";
678 is eval("t044(456, 789, 987, 654, 321)"), "123;";
679 is eval("t044(456, 789, 987, 654, 321, 111)"), "123;";
680 is $a, 123;
681
682 sub t049 ($a, %b) { $a.";".join("/", map { $_."=".$b{$_} } sort keys %b) }
683 is prototype(\&t049), undef;
684 is eval("t049()"), undef;
685 like $@, qr/\AToo few arguments for subroutine at/;
686 is eval("t049(222)"), "222;";
687 is eval("t049(222, 456)"), undef;
688 like $@, qr#\AOdd name/value argument for subroutine at#;
689 is eval("t049(222, 456, 789)"), "222;456=789";
690 is eval("t049(222, 456, 789, 987)"), undef;
691 like $@, qr#\AOdd name/value argument for subroutine at#;
692 is eval("t049(222, 456, 789, 987, 654)"), "222;456=789/987=654";
693 is eval("t049(222, 456, 789, 987, 654, 321)"), undef;
694 like $@, qr#\AOdd name/value argument for subroutine at#;
695 is eval("t049(222, 456, 789, 987, 654, 321, 111)"),
696     "222;321=111/456=789/987=654";
697 is $a, 123;
698
699 sub t051 ($a, $b, $c, @d) { "$a;$b;$c;".join("/", @d).";".scalar(@d) }
700 is prototype(\&t051), undef;
701 is eval("t051()"), undef;
702 like $@, qr/\AToo few arguments for subroutine at/;
703 is eval("t051(456)"), undef;
704 like $@, qr/\AToo few arguments for subroutine at/;
705 is eval("t051(456, 789)"), undef;
706 like $@, qr/\AToo few arguments for subroutine at/;
707 is eval("t051(456, 789, 987)"), "456;789;987;;0";
708 is eval("t051(456, 789, 987, 654)"), "456;789;987;654;1";
709 is eval("t051(456, 789, 987, 654, 321)"), "456;789;987;654/321;2";
710 is eval("t051(456, 789, 987, 654, 321, 111)"), "456;789;987;654/321/111;3";
711 is $a, 123;
712
713 sub t052 ($a, $b, %c) { "$a;$b;".join("/", map { $_."=".$c{$_} } sort keys %c) }
714 is prototype(\&t052), undef;
715 is eval("t052()"), undef;
716 like $@, qr/\AToo few arguments for subroutine at/;
717 is eval("t052(222)"), undef;
718 like $@, qr/\AToo few arguments for subroutine at/;
719 is eval("t052(222, 333)"), "222;333;";
720 is eval("t052(222, 333, 456)"), undef;
721 like $@, qr#\AOdd name/value argument for subroutine at#;
722 is eval("t052(222, 333, 456, 789)"), "222;333;456=789";
723 is eval("t052(222, 333, 456, 789, 987)"), undef;
724 like $@, qr#\AOdd name/value argument for subroutine at#;
725 is eval("t052(222, 333, 456, 789, 987, 654)"), "222;333;456=789/987=654";
726 is eval("t052(222, 333, 456, 789, 987, 654, 321)"), undef;
727 like $@, qr#\AOdd name/value argument for subroutine at#;
728 is eval("t052(222, 333, 456, 789, 987, 654, 321, 111)"),
729     "222;333;321=111/456=789/987=654";
730 is $a, 123;
731
732 sub t053 ($a, $b, $c, %d) {
733     "$a;$b;$c;".join("/", map { $_."=".$d{$_} } sort keys %d)
734 }
735 is prototype(\&t053), undef;
736 is eval("t053()"), undef;
737 like $@, qr/\AToo few arguments for subroutine at/;
738 is eval("t053(222)"), undef;
739 like $@, qr/\AToo few arguments for subroutine at/;
740 is eval("t053(222, 333)"), undef;
741 like $@, qr/\AToo few arguments for subroutine at/;
742 is eval("t053(222, 333, 444)"), "222;333;444;";
743 is eval("t053(222, 333, 444, 456)"), undef;
744 like $@, qr#\AOdd name/value argument for subroutine at#;
745 is eval("t053(222, 333, 444, 456, 789)"), "222;333;444;456=789";
746 is eval("t053(222, 333, 444, 456, 789, 987)"), undef;
747 like $@, qr#\AOdd name/value argument for subroutine at#;
748 is eval("t053(222, 333, 444, 456, 789, 987, 654)"),
749     "222;333;444;456=789/987=654";
750 is eval("t053(222, 333, 444, 456, 789, 987, 654, 321)"), undef;
751 like $@, qr#\AOdd name/value argument for subroutine at#;
752 is eval("t053(222, 333, 444, 456, 789, 987, 654, 321, 111)"),
753     "222;333;444;321=111/456=789/987=654";
754 is $a, 123;
755
756 sub t048 ($a = 222, @b) { $a.";".join("/", @b).";".scalar(@b) }
757 is prototype(\&t048), undef;
758 is eval("t048()"), "222;;0";
759 is eval("t048(0)"), "0;;0";
760 is eval("t048(456)"), "456;;0";
761 is eval("t048(456, 789)"), "456;789;1";
762 is eval("t048(456, 789, 987)"), "456;789/987;2";
763 is eval("t048(456, 789, 987, 654)"), "456;789/987/654;3";
764 is eval("t048(456, 789, 987, 654, 321)"), "456;789/987/654/321;4";
765 is eval("t048(456, 789, 987, 654, 321, 111)"), "456;789/987/654/321/111;5";
766 is $a, 123;
767
768 sub t054 ($a = 222, $b = 333, @c) { "$a;$b;".join("/", @c).";".scalar(@c) }
769 is prototype(\&t054), undef;
770 is eval("t054()"), "222;333;;0";
771 is eval("t054(456)"), "456;333;;0";
772 is eval("t054(456, 789)"), "456;789;;0";
773 is eval("t054(456, 789, 987)"), "456;789;987;1";
774 is eval("t054(456, 789, 987, 654)"), "456;789;987/654;2";
775 is eval("t054(456, 789, 987, 654, 321)"), "456;789;987/654/321;3";
776 is eval("t054(456, 789, 987, 654, 321, 111)"), "456;789;987/654/321/111;4";
777 is $a, 123;
778
779 sub t055 ($a = 222, $b = 333, $c = 444, @d) {
780     "$a;$b;$c;".join("/", @d).";".scalar(@d)
781 }
782 is prototype(\&t055), undef;
783 is eval("t055()"), "222;333;444;;0";
784 is eval("t055(456)"), "456;333;444;;0";
785 is eval("t055(456, 789)"), "456;789;444;;0";
786 is eval("t055(456, 789, 987)"), "456;789;987;;0";
787 is eval("t055(456, 789, 987, 654)"), "456;789;987;654;1";
788 is eval("t055(456, 789, 987, 654, 321)"), "456;789;987;654/321;2";
789 is eval("t055(456, 789, 987, 654, 321, 111)"), "456;789;987;654/321/111;3";
790 is $a, 123;
791
792 sub t050 ($a = 211, %b) { $a.";".join("/", map { $_."=".$b{$_} } sort keys %b) }
793 is prototype(\&t050), undef;
794 is eval("t050()"), "211;";
795 is eval("t050(222)"), "222;";
796 is eval("t050(222, 456)"), undef;
797 like $@, qr#\AOdd name/value argument for subroutine at#;
798 is eval("t050(222, 456, 789)"), "222;456=789";
799 is eval("t050(222, 456, 789, 987)"), undef;
800 like $@, qr#\AOdd name/value argument for subroutine at#;
801 is eval("t050(222, 456, 789, 987, 654)"), "222;456=789/987=654";
802 is eval("t050(222, 456, 789, 987, 654, 321)"), undef;
803 like $@, qr#\AOdd name/value argument for subroutine at#;
804 is eval("t050(222, 456, 789, 987, 654, 321, 111)"),
805     "222;321=111/456=789/987=654";
806 is $a, 123;
807
808 sub t056 ($a = 211, $b = 311, %c) {
809     "$a;$b;".join("/", map { $_."=".$c{$_} } sort keys %c)
810 }
811 is prototype(\&t056), undef;
812 is eval("t056()"), "211;311;";
813 is eval("t056(222)"), "222;311;";
814 is eval("t056(222, 333)"), "222;333;";
815 is eval("t056(222, 333, 456)"), undef;
816 like $@, qr#\AOdd name/value argument for subroutine at#;
817 is eval("t056(222, 333, 456, 789)"), "222;333;456=789";
818 is eval("t056(222, 333, 456, 789, 987)"), undef;
819 like $@, qr#\AOdd name/value argument for subroutine at#;
820 is eval("t056(222, 333, 456, 789, 987, 654)"), "222;333;456=789/987=654";
821 is eval("t056(222, 333, 456, 789, 987, 654, 321)"), undef;
822 like $@, qr#\AOdd name/value argument for subroutine at#;
823 is eval("t056(222, 333, 456, 789, 987, 654, 321, 111)"),
824     "222;333;321=111/456=789/987=654";
825 is $a, 123;
826
827 sub t057 ($a = 211, $b = 311, $c = 411, %d) {
828     "$a;$b;$c;".join("/", map { $_."=".$d{$_} } sort keys %d)
829 }
830 is prototype(\&t057), undef;
831 is eval("t057()"), "211;311;411;";
832 is eval("t057(222)"), "222;311;411;";
833 is eval("t057(222, 333)"), "222;333;411;";
834 is eval("t057(222, 333, 444)"), "222;333;444;";
835 is eval("t057(222, 333, 444, 456)"), undef;
836 like $@, qr#\AOdd name/value argument for subroutine at#;
837 is eval("t057(222, 333, 444, 456, 789)"), "222;333;444;456=789";
838 is eval("t057(222, 333, 444, 456, 789, 987)"), undef;
839 like $@, qr#\AOdd name/value argument for subroutine at#;
840 is eval("t057(222, 333, 444, 456, 789, 987, 654)"),
841     "222;333;444;456=789/987=654";
842 is eval("t057(222, 333, 444, 456, 789, 987, 654, 321)"), undef;
843 like $@, qr#\AOdd name/value argument for subroutine at#;
844 is eval("t057(222, 333, 444, 456, 789, 987, 654, 321, 111)"),
845     "222;333;444;321=111/456=789/987=654";
846 is $a, 123;
847
848 sub t058 ($a, $b = 333, @c) { "$a;$b;".join("/", @c).";".scalar(@c) }
849 is prototype(\&t058), undef;
850 is eval("t058()"), undef;
851 like $@, qr/\AToo few arguments for subroutine at/;
852 is eval("t058(456)"), "456;333;;0";
853 is eval("t058(456, 789)"), "456;789;;0";
854 is eval("t058(456, 789, 987)"), "456;789;987;1";
855 is eval("t058(456, 789, 987, 654)"), "456;789;987/654;2";
856 is eval("t058(456, 789, 987, 654, 321)"), "456;789;987/654/321;3";
857 is eval("t058(456, 789, 987, 654, 321, 111)"), "456;789;987/654/321/111;4";
858 is $a, 123;
859
860 eval "#line 8 foo\nsub t059 (\@a, \$b) { }";
861 is $@, "Slurpy parameter not last at foo line 8\.\n";
862
863 eval "#line 8 foo\nsub t060 (\@a, \$b = 222) { }";
864 is $@, "Slurpy parameter not last at foo line 8\.\n";
865
866 eval "#line 8 foo\nsub t061 (\@a, \@b) { }";
867 is $@, "Slurpy parameter not last at foo line 8\.\n";
868
869 eval "#line 8 foo\nsub t062 (\@a, \%b) { }";
870 is $@, "Slurpy parameter not last at foo line 8\.\n";
871
872 eval "#line 8 foo\nsub t063 (\@, \$b) { }";
873 is $@, "Slurpy parameter not last at foo line 8\.\n";
874
875 eval "#line 8 foo\nsub t064 (\@, \$b = 222) { }";
876 is $@, "Slurpy parameter not last at foo line 8\.\n";
877
878 eval "#line 8 foo\nsub t065 (\@, \@b) { }";
879 is $@, "Slurpy parameter not last at foo line 8\.\n";
880
881 eval "#line 8 foo\nsub t066 (\@, \%b) { }";
882 is $@, "Slurpy parameter not last at foo line 8\.\n";
883
884 eval "#line 8 foo\nsub t067 (\@a, \$) { }";
885 is $@, "Slurpy parameter not last at foo line 8\.\n";
886
887 eval "#line 8 foo\nsub t068 (\@a, \$ = 222) { }";
888 is $@, "Slurpy parameter not last at foo line 8\.\n";
889
890 eval "#line 8 foo\nsub t069 (\@a, \@) { }";
891 is $@, "Slurpy parameter not last at foo line 8\.\n";
892
893 eval "#line 8 foo\nsub t070 (\@a, \%) { }";
894 is $@, "Slurpy parameter not last at foo line 8\.\n";
895
896 eval "#line 8 foo\nsub t071 (\@, \$) { }";
897 is $@, "Slurpy parameter not last at foo line 8\.\n";
898
899 eval "#line 8 foo\nsub t072 (\@, \$ = 222) { }";
900 is $@, "Slurpy parameter not last at foo line 8\.\n";
901
902 eval "#line 8 foo\nsub t073 (\@, \@) { }";
903 is $@, "Slurpy parameter not last at foo line 8\.\n";
904
905 eval "#line 8 foo\nsub t074 (\@, \%) { }";
906 is $@, "Slurpy parameter not last at foo line 8\.\n";
907
908 eval "#line 8 foo\nsub t075 (\%a, \$b) { }";
909 is $@, "Slurpy parameter not last at foo line 8\.\n";
910
911 eval "#line 8 foo\nsub t076 (\%, \$b) { }";
912 is $@, "Slurpy parameter not last at foo line 8\.\n";
913
914 eval "#line 8 foo\nsub t077 (\$a, \@b, \$c) { }";
915 is $@, "Slurpy parameter not last at foo line 8\.\n";
916
917 eval "#line 8 foo\nsub t078 (\$a, \%b, \$c) { }";
918 is $@, "Slurpy parameter not last at foo line 8\.\n";
919
920 eval "#line 8 foo\nsub t079 (\$a, \@b, \$c, \$d) { }";
921 is $@, "Slurpy parameter not last at foo line 8\.\n";
922
923 sub t080 ($a,,, $b) { $a.$b }
924 is prototype(\&t080), undef;
925 is eval("t080()"), undef;
926 like $@, qr/\AToo few arguments for subroutine at/;
927 is eval("t080(456)"), undef;
928 like $@, qr/\AToo few arguments for subroutine at/;
929 is eval("t080(456, 789)"), "456789";
930 is eval("t080(456, 789, 987)"), undef;
931 like $@, qr/\AToo many arguments for subroutine at/;
932 is eval("t080(456, 789, 987, 654)"), undef;
933 like $@, qr/\AToo many arguments for subroutine at/;
934 is $a, 123;
935
936 sub t081 ($a, $b,,) { $a.$b }
937 is prototype(\&t081), undef;
938 is eval("t081()"), undef;
939 like $@, qr/\AToo few arguments for subroutine at/;
940 is eval("t081(456)"), undef;
941 like $@, qr/\AToo few arguments for subroutine at/;
942 is eval("t081(456, 789)"), "456789";
943 is eval("t081(456, 789, 987)"), undef;
944 like $@, qr/\AToo many arguments for subroutine at/;
945 is eval("t081(456, 789, 987, 654)"), undef;
946 like $@, qr/\AToo many arguments for subroutine at/;
947 is $a, 123;
948
949 eval "#line 8 foo\nsub t082 (, \$a) { }";
950 like $@, qr/\AParse error at foo line 8\.\n/;
951
952 eval "#line 8 foo\nsub t083 (,) { }";
953 like $@, qr/\AParse error at foo line 8\.\n/;
954
955 sub t084($a,$b){ $a.$b }
956 is prototype(\&t084), undef;
957 is eval("t084()"), undef;
958 like $@, qr/\AToo few arguments for subroutine at/;
959 is eval("t084(456)"), undef;
960 like $@, qr/\AToo few arguments for subroutine at/;
961 is eval("t084(456, 789)"), "456789";
962 is eval("t084(456, 789, 987)"), undef;
963 like $@, qr/\AToo many arguments for subroutine at/;
964 is eval("t084(456, 789, 987, 654)"), undef;
965 like $@, qr/\AToo many arguments for subroutine at/;
966 is $a, 123;
967
968 sub t085
969     (
970     $
971     a
972     ,
973     ,
974     $
975     b
976     =
977     333
978     ,
979     ,
980     )
981     { $a.$b }
982 is prototype(\&t085), undef;
983 is eval("t085()"), undef;
984 like $@, qr/\AToo few arguments for subroutine at/;
985 is eval("t085(456)"), "456333";
986 is eval("t085(456, 789)"), "456789";
987 is eval("t085(456, 789, 987)"), undef;
988 like $@, qr/\AToo many arguments for subroutine at/;
989 is eval("t085(456, 789, 987, 654)"), undef;
990 like $@, qr/\AToo many arguments for subroutine at/;
991 is $a, 123;
992
993 sub t086
994     ( #foo)))
995     $ #foo)))
996     a #foo)))
997     , #foo)))
998     , #foo)))
999     $ #foo)))
1000     b #foo)))
1001     = #foo)))
1002     333 #foo)))
1003     , #foo)))
1004     , #foo)))
1005     ) #foo)))
1006     { $a.$b }
1007 is prototype(\&t086), undef;
1008 is eval("t086()"), undef;
1009 like $@, qr/\AToo few arguments for subroutine at/;
1010 is eval("t086(456)"), "456333";
1011 is eval("t086(456, 789)"), "456789";
1012 is eval("t086(456, 789, 987)"), undef;
1013 like $@, qr/\AToo many arguments for subroutine at/;
1014 is eval("t086(456, 789, 987, 654)"), undef;
1015 like $@, qr/\AToo many arguments for subroutine at/;
1016 is $a, 123;
1017
1018 sub t087
1019     (#foo)))
1020     $ #foo)))
1021     a#foo)))
1022     ,#foo)))
1023     ,#foo)))
1024     $ #foo)))
1025     b#foo)))
1026     =#foo)))
1027     333#foo)))
1028     ,#foo)))
1029     ,#foo)))
1030     )#foo)))
1031     { $a.$b }
1032 is prototype(\&t087), undef;
1033 is eval("t087()"), undef;
1034 like $@, qr/\AToo few arguments for subroutine at/;
1035 is eval("t087(456)"), "456333";
1036 is eval("t087(456, 789)"), "456789";
1037 is eval("t087(456, 789, 987)"), undef;
1038 like $@, qr/\AToo many arguments for subroutine at/;
1039 is eval("t087(456, 789, 987, 654)"), undef;
1040 like $@, qr/\AToo many arguments for subroutine at/;
1041 is $a, 123;
1042
1043 eval "#line 8 foo\nsub t088 (\$ #foo\na) { }";
1044 is $@, "";
1045
1046 eval "#line 8 foo\nsub t089 (\$#foo\na) { }";
1047 like $@, qr/\AParse error at foo line 8\.\n/;
1048
1049 eval "#line 8 foo\nsub t090 (\@ #foo\na) { }";
1050 is $@, "";
1051
1052 eval "#line 8 foo\nsub t091 (\@#foo\na) { }";
1053 like $@, qr/\AParse error at foo line 8\.\n/;
1054
1055 eval "#line 8 foo\nsub t092 (\% #foo\na) { }";
1056 is $@, "";
1057
1058 eval "#line 8 foo\nsub t093 (\%#foo\na) { }";
1059 like $@, qr/\AParse error at foo line 8\.\n/;
1060
1061 eval "#line 8 foo\nsub t094 (123) { }";
1062 like $@, qr/\AParse error at foo line 8\.\n/;
1063
1064 eval "#line 8 foo\nsub t095 (\$a, 123) { }";
1065 like $@, qr/\AParse error at foo line 8\.\n/;
1066
1067 eval "#line 8 foo\nsub t096 (\$a 123) { }";
1068 like $@, qr/\AParse error at foo line 8\.\n/;
1069
1070 eval "#line 8 foo\nsub t097 (\$a { }) { }";
1071 like $@, qr/\AParse error at foo line 8\.\n/;
1072
1073 eval "#line 8 foo\nsub t098 (\$a; \$b) { }";
1074 like $@, qr/\AParse error at foo line 8\.\n/;
1075
1076 eval "#line 8 foo\nsub t099 (\$\$) { }";
1077 like $@, qr/\AParse error at foo line 8\.\n/;
1078
1079 no warnings "experimental::lexical_topic";
1080 sub t100 ($_) { "$::_/$_" }
1081 is prototype(\&t100), undef;
1082 $_ = "___";
1083 is eval("t100()"), undef;
1084 like $@, qr/\AToo few arguments for subroutine at/;
1085 $_ = "___";
1086 is eval("t100(0)"), "___/0";
1087 $_ = "___";
1088 is eval("t100(456)"), "___/456";
1089 $_ = "___";
1090 is eval("t100(456, 789)"), undef;
1091 like $@, qr/\AToo many arguments for subroutine at/;
1092 $_ = "___";
1093 is eval("t100(456, 789, 987)"), undef;
1094 like $@, qr/\AToo many arguments for subroutine at/;
1095 is $a, 123;
1096
1097 eval "#line 8 foo\nsub t101 (\@_) { }";
1098 like $@, qr/\ACan't use global \@_ in "my" at foo line 8/;
1099
1100 eval "#line 8 foo\nsub t102 (\%_) { }";
1101 like $@, qr/\ACan't use global \%_ in "my" at foo line 8/;
1102
1103 my $t103 = sub ($a) { $a || "z" };
1104 is prototype($t103), undef;
1105 is eval("\$t103->()"), undef;
1106 like $@, qr/\AToo few arguments for subroutine at/;
1107 is eval("\$t103->(0)"), "z";
1108 is eval("\$t103->(456)"), 456;
1109 is eval("\$t103->(456, 789)"), undef;
1110 like $@, qr/\AToo many arguments for subroutine at/;
1111 is eval("\$t103->(456, 789, 987)"), undef;
1112 like $@, qr/\AToo many arguments for subroutine at/;
1113 is $a, 123;
1114
1115 my $t118 = sub :prototype($) ($a) { $a || "z" };
1116 is prototype($t118), "\$";
1117 is eval("\$t118->()"), undef;
1118 like $@, qr/\AToo few arguments for subroutine at/;
1119 is eval("\$t118->(0)"), "z";
1120 is eval("\$t118->(456)"), 456;
1121 is eval("\$t118->(456, 789)"), undef;
1122 like $@, qr/\AToo many arguments for subroutine at/;
1123 is eval("\$t118->(456, 789, 987)"), undef;
1124 like $@, qr/\AToo many arguments for subroutine at/;
1125 is $a, 123;
1126
1127 sub t033 ($a = sub ($a) { $a."z" }) { $a->("a")."y" }
1128 is prototype(\&t033), undef;
1129 is eval("t033()"), "azy";
1130 is eval("t033(sub { \"x\".\$_[0].\"x\" })"), "xaxy";
1131 is eval("t033(sub { \"x\".\$_[0].\"x\" }, 789)"), undef;
1132 like $@, qr/\AToo many arguments for subroutine at/;
1133 is $a, 123;
1134
1135 sub t104 :method ($a) { $a || "z" }
1136 is prototype(\&t104), undef;
1137 is eval("t104()"), undef;
1138 like $@, qr/\AToo few arguments for subroutine at/;
1139 is eval("t104(0)"), "z";
1140 is eval("t104(456)"), 456;
1141 is eval("t104(456, 789)"), undef;
1142 like $@, qr/\AToo many arguments for subroutine at/;
1143 is eval("t104(456, 789, 987)"), undef;
1144 like $@, qr/\AToo many arguments for subroutine at/;
1145 is $a, 123;
1146
1147 sub t105 :prototype($) ($a) { $a || "z" }
1148 is prototype(\&t105), "\$";
1149 is eval("t105()"), undef;
1150 like $@, qr/\ANot enough arguments for main::t105 /;
1151 is eval("t105(0)"), "z";
1152 is eval("t105(456)"), 456;
1153 is eval("t105(456, 789)"), undef;
1154 like $@, qr/\AToo many arguments for main::t105 at/;
1155 is eval("t105(456, 789, 987)"), undef;
1156 like $@, qr/\AToo many arguments for main::t105 at/;
1157 is $a, 123;
1158
1159 sub t106 :prototype(@) ($a) { $a || "z" }
1160 is prototype(\&t106), "\@";
1161 is eval("t106()"), undef;
1162 like $@, qr/\AToo few arguments for subroutine at/;
1163 is eval("t106(0)"), "z";
1164 is eval("t106(456)"), 456;
1165 is eval("t106(456, 789)"), undef;
1166 like $@, qr/\AToo many arguments for subroutine at/;
1167 is eval("t106(456, 789, 987)"), undef;
1168 like $@, qr/\AToo many arguments for subroutine at/;
1169 is $a, 123;
1170
1171 eval "#line 8 foo\nsub t107 (\$a) :method { }";
1172 isnt $@, "";
1173
1174 eval "#line 8 foo\nsub t108 (\$a) :prototype(\$) { }";
1175 isnt $@, "";
1176
1177 sub t109 { }
1178 is prototype(\&t109), undef;
1179 is scalar(@{[ t109() ]}), 0;
1180 is scalar(t109()), undef;
1181
1182 sub t110 () { }
1183 is prototype(\&t110), undef;
1184 is scalar(@{[ t110() ]}), 0;
1185 is scalar(t110()), undef;
1186
1187 sub t111 ($a) { }
1188 is prototype(\&t111), undef;
1189 is scalar(@{[ t111(222) ]}), 0;
1190 is scalar(t111(222)), undef;
1191
1192 sub t112 ($) { }
1193 is prototype(\&t112), undef;
1194 is scalar(@{[ t112(222) ]}), 0;
1195 is scalar(t112(222)), undef;
1196
1197 sub t114 ($a = undef) { }
1198 is prototype(\&t114), undef;
1199 is scalar(@{[ t114() ]}), 0;
1200 is scalar(t114()), undef;
1201 is scalar(@{[ t114(333) ]}), 0;
1202 is scalar(t114(333)), undef;
1203
1204 sub t113 ($a = 222) { }
1205 is prototype(\&t113), undef;
1206 is scalar(@{[ t113() ]}), 0;
1207 is scalar(t113()), undef;
1208 is scalar(@{[ t113(333) ]}), 0;
1209 is scalar(t113(333)), undef;
1210
1211 sub t115 ($a = do { $z++; 222 }) { }
1212 is prototype(\&t115), undef;
1213 $z = 0;
1214 is scalar(@{[ t115() ]}), 0;
1215 is $z, 1;
1216 is scalar(t115()), undef;
1217 is $z, 2;
1218 is scalar(@{[ t115(333) ]}), 0;
1219 is scalar(t115(333)), undef;
1220 is $z, 2;
1221
1222 sub t116 (@a) { }
1223 is prototype(\&t116), undef;
1224 is scalar(@{[ t116() ]}), 0;
1225 is scalar(t116()), undef;
1226 is scalar(@{[ t116(333) ]}), 0;
1227 is scalar(t116(333)), undef;
1228
1229 sub t117 (%a) { }
1230 is prototype(\&t117), undef;
1231 is scalar(@{[ t117() ]}), 0;
1232 is scalar(t117()), undef;
1233 is scalar(@{[ t117(333, 444) ]}), 0;
1234 is scalar(t117(333, 444)), undef;
1235
1236 1;