3 #P = start of string Q = start of substr R = end of substr S = end of string
12 $SIG{__WARN__} = sub {
13 if ($_[0] =~ /^substr outside of string/) {
15 } elsif ($_[0] =~ /^Attempt to use reference as lvalue in substr/) {
17 } elsif ($_[0] =~ /^Use of uninitialized value/) {
24 BEGIN { require './test.pl'; }
28 run_tests() unless caller;
34 $FATAL_MSG = qr/^substr outside of string/;
36 is(substr($a,0,3), 'abc'); # P=Q R S
37 is(substr($a,3,3), 'def'); # P Q R S
38 is(substr($a,6,999), 'xyz'); # P Q S R
39 $b = substr($a,999,999) ; # warn # P R Q S
41 eval{substr($a,999,999) = "" ; };# P R Q S
42 like ($@, $FATAL_MSG);
43 is(substr($a,0,-6), 'abc'); # P=Q R S
44 is(substr($a,-3,1), 'x'); # P Q R S
45 sub{$b = shift}->(substr($a,999,999));
46 is ($w--, 1, 'boundless lvalue substr only warns on fetch');
48 substr($a,3,3) = 'XYZ';
52 substr($a,0,0) = 'ab';
54 substr($a,0,0) = '12345678';
55 is($a, '12345678abcXYZxyz' );
56 substr($a,-3,3) = 'def';
57 is($a, '12345678abcXYZdef');
58 substr($a,-3,3) = '<';
59 is($a, '12345678abcXYZ<' );
60 substr($a,-1,1) = '12345678';
61 is($a, '12345678abcXYZ12345678' );
65 is(substr($a,6), 'xyz' ); # P Q R=S
66 is(substr($a,-3), 'xyz' ); # P Q R=S
67 $b = substr($a,999,999) ; # warning # P R=S Q
69 eval{substr($a,999,999) = "" ; } ; # P R=S Q
71 is(substr($a,0), 'abcdefxyz'); # P=Q R=S
72 is(substr($a,9), ''); # P Q=R=S
73 is(substr($a,-11), 'abcdefxyz'); # Q P R=S
74 is(substr($a,-9), 'abcdefxyz'); # P=Q R=S
78 $b = substr($a,-7, 1) ; # warn # Q R P S
80 eval{substr($a,-7, 1) = "" ; }; # Q R P S
82 $b = substr($a,-7,-6) ; # warn # Q R P S
84 eval{substr($a,-7,-6) = "" ; }; # Q R P S
86 is(substr($a,-5,-7), ''); # R P=Q S
87 is(substr($a, 2,-7), ''); # R P Q S
88 is(substr($a,-3,-7), ''); # R P Q S
89 is(substr($a, 2,-5), ''); # P=R Q S
90 is(substr($a,-3,-5), ''); # P=R Q S
91 is(substr($a, 2,-4), ''); # P R Q S
92 is(substr($a,-3,-4), ''); # P R Q S
93 is(substr($a, 5,-6), ''); # R P Q=S
94 is(substr($a, 5,-5), ''); # P=R Q S
95 is(substr($a, 5,-3), ''); # P R Q=S
96 $b = substr($a, 7,-7) ; # warn # R P S Q
98 eval{substr($a, 7,-7) = "" ; }; # R P S Q
100 $b = substr($a, 7,-5) ; # warn # P=R S Q
102 eval{substr($a, 7,-5) = "" ; }; # P=R S Q
103 like($@, $FATAL_MSG);
104 $b = substr($a, 7,-3) ; # warn # P Q S Q
106 eval{substr($a, 7,-3) = "" ; }; # P Q S Q
107 like($@, $FATAL_MSG);
108 $b = substr($a, 7, 0) ; # warn # P S Q=R
110 eval{substr($a, 7, 0) = "" ; }; # P S Q=R
111 like($@, $FATAL_MSG);
113 is(substr($a,-7,2), ''); # Q P=R S
114 is(substr($a,-7,4), '54'); # Q P R S
115 is(substr($a,-7,7), '54321');# Q P R=S
116 is(substr($a,-7,9), '54321');# Q P S R
117 is(substr($a,-5,0), ''); # P=Q=R S
118 is(substr($a,-5,3), '543');# P=Q R S
119 is(substr($a,-5,5), '54321');# P=Q R=S
120 is(substr($a,-5,7), '54321');# P=Q S R
121 is(substr($a,-3,0), ''); # P Q=R S
122 is(substr($a,-3,3), '321');# P Q R=S
123 is(substr($a,-2,3), '21'); # P Q S R
124 is(substr($a,0,-5), ''); # P=Q=R S
125 is(substr($a,2,-3), ''); # P Q=R S
126 is(substr($a,0,0), ''); # P=Q=R S
127 is(substr($a,0,5), '54321');# P=Q R=S
128 is(substr($a,0,7), '54321');# P=Q S R
129 is(substr($a,2,0), ''); # P Q=R S
130 is(substr($a,2,3), '321'); # P Q R=S
131 is(substr($a,5,0), ''); # P Q=R=S
132 is(substr($a,5,2), ''); # P Q=S R
133 is(substr($a,-7,-5), ''); # Q P=R S
134 is(substr($a,-7,-2), '543');# Q P R S
135 is(substr($a,-5,-5), ''); # P=Q=R S
136 is(substr($a,-5,-2), '543');# P=Q R S
137 is(substr($a,-3,-3), ''); # P Q=R S
138 is(substr($a,-3,-1), '32');# P Q R S
142 is(substr($a,-2,2), ''); # Q P=R=S
143 is(substr($a,0,0), ''); # P=Q=R=S
144 is(substr($a,0,1), ''); # P=Q=S R
145 is(substr($a,-2,3), ''); # Q P=S R
146 is(substr($a,-2), ''); # Q P=R=S
147 is(substr($a,0), ''); # P=Q=R=S
150 is(substr($a,0,-1), ''); # R P=Q=S
151 $b = substr($a,-2, 0) ; # warn # Q=R P=S
153 eval{substr($a,-2, 0) = "" ; }; # Q=R P=S
154 like($@, $FATAL_MSG);
156 $b = substr($a,-2, 1) ; # warn # Q R P=S
158 eval{substr($a,-2, 1) = "" ; }; # Q R P=S
159 like($@, $FATAL_MSG);
161 $b = substr($a,-2,-1) ; # warn # Q R P=S
163 eval{substr($a,-2,-1) = "" ; }; # Q R P=S
164 like($@, $FATAL_MSG);
166 $b = substr($a,-2,-2) ; # warn # Q=R P=S
168 eval{substr($a,-2,-2) = "" ; }; # Q=R P=S
169 like($@, $FATAL_MSG);
171 $b = substr($a, 1,-2) ; # warn # R P=S Q
173 eval{substr($a, 1,-2) = "" ; }; # R P=S Q
174 like($@, $FATAL_MSG);
176 $b = substr($a, 1, 1) ; # warn # P=S Q R
178 eval{substr($a, 1, 1) = "" ; }; # P=S Q R
179 like($@, $FATAL_MSG);
181 $b = substr($a, 1, 0) ;# warn # P=S Q=R
183 eval{substr($a, 1, 0) = "" ; }; # P=S Q=R
184 like($@, $FATAL_MSG);
186 $b = substr($a,1) ; # warning # P=R=S Q
188 eval{substr($a,1) = "" ; }; # P=R=S Q
189 like($@, $FATAL_MSG);
191 $b = substr($a,-7,-6) ; # warn # Q R P S
193 eval{substr($a,-7,-6) = "" ; }; # Q R P S
194 like($@, $FATAL_MSG);
203 substr($a,0,2) = 'pq';
205 substr($a,2,0) = 'r';
207 substr($a,8,0) = 'asd';
208 is($a, 'pqrcvbnmasd');
209 substr($a,0,2) = 'iop';
210 is($a, 'ioprcvbnmasd');
211 substr($a,0,5) = 'fgh';
212 is($a, 'fghvbnmasd');
213 substr($a,3,5) = 'jkl';
215 substr($a,3,2) = '1234';
216 is($a, 'fgh1234lsd');
219 # with lexicals (and in re-entered scopes)
224 substr($txt, -1) = "X";
228 substr($txt, 0, 1) = "X";
234 # coercion of references
237 substr($s, 0, 1) = 'Foo';
238 is (substr($s,0,7), "FooRRAY");
243 # check no spurious warnings
246 # check new 4 arg replacement syntax
249 is(substr($a, 0, 3, ""), "abc");
251 is(substr($a, 0, 0, "abc"), "");
253 is(substr($a, 3, -1, ""), "xy");
256 is(substr($a, 3, undef, "xy"), "");
262 is(substr($a, 3, 9999999, ""), "xyz");
264 eval{substr($a, -99, 0, "") };
265 like($@, $FATAL_MSG);
266 eval{substr($a, 99, 3, "") };
267 like($@, $FATAL_MSG);
269 substr($a, 0, length($a), "foo");
273 # using 4 arg substr as lvalue is a compile time error
274 eval 'substr($a,0,0,"") = "abc"';
275 like ($@, qr/Can't modify substr/);
279 is(sub { shift }->(substr($a, 0, 4, "xxxx")), 'abcd');
290 my $x = substr("a\x{263a}b",0);
296 substr($x,0,1) = "abcd";
297 is($x, "abcd\x{263a}");
301 is($x, "\x{263a}dcba");
304 $z = "21\x{263a}" . $z;
306 is($z, "21\x{263a}10");
309 # replacement should work on magical values
312 tie $data{'a'}, 'Tie::StdScalar'; # makes $data{'a'} magical
313 $data{a} = "firstlast";
314 is(substr($data{'a'}, 0, 5, ""), "first");
315 is($data{'a'}, "last");
319 # The following two originally from Ignasi Roca.
322 substr($x, 0, 1) = "\x{100}"; # Ignasi had \x{FF}
324 is($x, "\x{100}\xF2\xF3");
325 is(substr($x, 0, 1), "\x{100}");
326 is(substr($x, 1, 1), "\x{F2}");
327 is(substr($x, 2, 1), "\x{F3}");
330 substr($x, 0, 1) = "\x{100}\x{FF}"; # Ignasi had \x{FF}
332 is($x, "\x{100}\x{FF}\xF2\xF3");
333 is(substr($x, 0, 1), "\x{100}");
334 is(substr($x, 1, 1), "\x{FF}");
335 is(substr($x, 2, 1), "\x{F2}");
336 is(substr($x, 3, 1), "\x{F3}");
338 # more utf8 lval exercise
341 substr($x, 0, 2) = "\x{100}\xFF";
343 is($x, "\x{100}\xFF\xF3");
344 is(substr($x, 0, 1), "\x{100}");
345 is(substr($x, 1, 1), "\x{FF}");
346 is(substr($x, 2, 1), "\x{F3}");
349 substr($x, 1, 1) = "\x{100}\xFF";
351 is($x, "\xF1\x{100}\xFF\xF3");
352 is(substr($x, 0, 1), "\x{F1}");
353 is(substr($x, 1, 1), "\x{100}");
354 is(substr($x, 2, 1), "\x{FF}");
355 is(substr($x, 3, 1), "\x{F3}");
358 substr($x, 2, 1) = "\x{100}\xFF";
360 is($x, "\xF1\xF2\x{100}\xFF");
361 is(substr($x, 0, 1), "\x{F1}");
362 is(substr($x, 1, 1), "\x{F2}");
363 is(substr($x, 2, 1), "\x{100}");
364 is(substr($x, 3, 1), "\x{FF}");
367 substr($x, 3, 1) = "\x{100}\xFF";
369 is($x, "\xF1\xF2\xF3\x{100}\xFF");
370 is(substr($x, 0, 1), "\x{F1}");
371 is(substr($x, 1, 1), "\x{F2}");
372 is(substr($x, 2, 1), "\x{F3}");
373 is(substr($x, 3, 1), "\x{100}");
374 is(substr($x, 4, 1), "\x{FF}");
377 substr($x, -1, 1) = "\x{100}\xFF";
379 is($x, "\xF1\xF2\x{100}\xFF");
380 is(substr($x, 0, 1), "\x{F1}");
381 is(substr($x, 1, 1), "\x{F2}");
382 is(substr($x, 2, 1), "\x{100}");
383 is(substr($x, 3, 1), "\x{FF}");
386 substr($x, -1, 0) = "\x{100}\xFF";
388 is($x, "\xF1\xF2\x{100}\xFF\xF3");
389 is(substr($x, 0, 1), "\x{F1}");
390 is(substr($x, 1, 1), "\x{F2}");
391 is(substr($x, 2, 1), "\x{100}");
392 is(substr($x, 3, 1), "\x{FF}");
393 is(substr($x, 4, 1), "\x{F3}");
396 substr($x, 0, -1) = "\x{100}\xFF";
398 is($x, "\x{100}\xFF\xF3");
399 is(substr($x, 0, 1), "\x{100}");
400 is(substr($x, 1, 1), "\x{FF}");
401 is(substr($x, 2, 1), "\x{F3}");
404 substr($x, 0, -2) = "\x{100}\xFF";
406 is($x, "\x{100}\xFF\xF2\xF3");
407 is(substr($x, 0, 1), "\x{100}");
408 is(substr($x, 1, 1), "\x{FF}");
409 is(substr($x, 2, 1), "\x{F2}");
410 is(substr($x, 3, 1), "\x{F3}");
413 substr($x, 0, -3) = "\x{100}\xFF";
415 is($x, "\x{100}\xFF\xF1\xF2\xF3");
416 is(substr($x, 0, 1), "\x{100}");
417 is(substr($x, 1, 1), "\x{FF}");
418 is(substr($x, 2, 1), "\x{F1}");
419 is(substr($x, 3, 1), "\x{F2}");
420 is(substr($x, 4, 1), "\x{F3}");
423 substr($x, 1, -1) = "\x{100}\xFF";
425 is($x, "\xF1\x{100}\xFF\xF3");
426 is(substr($x, 0, 1), "\x{F1}");
427 is(substr($x, 1, 1), "\x{100}");
428 is(substr($x, 2, 1), "\x{FF}");
429 is(substr($x, 3, 1), "\x{F3}");
432 substr($x, -1, -1) = "\x{100}\xFF";
434 is($x, "\xF1\xF2\x{100}\xFF\xF3");
435 is(substr($x, 0, 1), "\x{F1}");
436 is(substr($x, 1, 1), "\x{F2}");
437 is(substr($x, 2, 1), "\x{100}");
438 is(substr($x, 3, 1), "\x{FF}");
439 is(substr($x, 4, 1), "\x{F3}");
441 # And tests for already-UTF8 one
443 $x = "\x{101}\x{F2}\x{F3}";
444 substr($x, 0, 1) = "\x{100}";
446 is($x, "\x{100}\xF2\xF3");
447 is(substr($x, 0, 1), "\x{100}");
448 is(substr($x, 1, 1), "\x{F2}");
449 is(substr($x, 2, 1), "\x{F3}");
451 $x = "\x{101}\x{F2}\x{F3}";
452 substr($x, 0, 1) = "\x{100}\x{FF}";
454 is($x, "\x{100}\x{FF}\xF2\xF3");
455 is(substr($x, 0, 1), "\x{100}");
456 is(substr($x, 1, 1), "\x{FF}");
457 is(substr($x, 2, 1), "\x{F2}");
458 is(substr($x, 3, 1), "\x{F3}");
460 $x = "\x{101}\x{F2}\x{F3}";
461 substr($x, 0, 2) = "\x{100}\xFF";
463 is($x, "\x{100}\xFF\xF3");
464 is(substr($x, 0, 1), "\x{100}");
465 is(substr($x, 1, 1), "\x{FF}");
466 is(substr($x, 2, 1), "\x{F3}");
468 $x = "\x{101}\x{F2}\x{F3}";
469 substr($x, 1, 1) = "\x{100}\xFF";
471 is($x, "\x{101}\x{100}\xFF\xF3");
472 is(substr($x, 0, 1), "\x{101}");
473 is(substr($x, 1, 1), "\x{100}");
474 is(substr($x, 2, 1), "\x{FF}");
475 is(substr($x, 3, 1), "\x{F3}");
477 $x = "\x{101}\x{F2}\x{F3}";
478 substr($x, 2, 1) = "\x{100}\xFF";
480 is($x, "\x{101}\xF2\x{100}\xFF");
481 is(substr($x, 0, 1), "\x{101}");
482 is(substr($x, 1, 1), "\x{F2}");
483 is(substr($x, 2, 1), "\x{100}");
484 is(substr($x, 3, 1), "\x{FF}");
486 $x = "\x{101}\x{F2}\x{F3}";
487 substr($x, 3, 1) = "\x{100}\xFF";
489 is($x, "\x{101}\x{F2}\x{F3}\x{100}\xFF");
490 is(substr($x, 0, 1), "\x{101}");
491 is(substr($x, 1, 1), "\x{F2}");
492 is(substr($x, 2, 1), "\x{F3}");
493 is(substr($x, 3, 1), "\x{100}");
494 is(substr($x, 4, 1), "\x{FF}");
496 $x = "\x{101}\x{F2}\x{F3}";
497 substr($x, -1, 1) = "\x{100}\xFF";
499 is($x, "\x{101}\xF2\x{100}\xFF");
500 is(substr($x, 0, 1), "\x{101}");
501 is(substr($x, 1, 1), "\x{F2}");
502 is(substr($x, 2, 1), "\x{100}");
503 is(substr($x, 3, 1), "\x{FF}");
505 $x = "\x{101}\x{F2}\x{F3}";
506 substr($x, -1, 0) = "\x{100}\xFF";
508 is($x, "\x{101}\xF2\x{100}\xFF\xF3");
509 is(substr($x, 0, 1), "\x{101}");
510 is(substr($x, 1, 1), "\x{F2}");
511 is(substr($x, 2, 1), "\x{100}");
512 is(substr($x, 3, 1), "\x{FF}");
513 is(substr($x, 4, 1), "\x{F3}");
515 $x = "\x{101}\x{F2}\x{F3}";
516 substr($x, 0, -1) = "\x{100}\xFF";
518 is($x, "\x{100}\xFF\xF3");
519 is(substr($x, 0, 1), "\x{100}");
520 is(substr($x, 1, 1), "\x{FF}");
521 is(substr($x, 2, 1), "\x{F3}");
523 $x = "\x{101}\x{F2}\x{F3}";
524 substr($x, 0, -2) = "\x{100}\xFF";
526 is($x, "\x{100}\xFF\xF2\xF3");
527 is(substr($x, 0, 1), "\x{100}");
528 is(substr($x, 1, 1), "\x{FF}");
529 is(substr($x, 2, 1), "\x{F2}");
530 is(substr($x, 3, 1), "\x{F3}");
532 $x = "\x{101}\x{F2}\x{F3}";
533 substr($x, 0, -3) = "\x{100}\xFF";
535 is($x, "\x{100}\xFF\x{101}\x{F2}\x{F3}");
536 is(substr($x, 0, 1), "\x{100}");
537 is(substr($x, 1, 1), "\x{FF}");
538 is(substr($x, 2, 1), "\x{101}");
539 is(substr($x, 3, 1), "\x{F2}");
540 is(substr($x, 4, 1), "\x{F3}");
542 $x = "\x{101}\x{F2}\x{F3}";
543 substr($x, 1, -1) = "\x{100}\xFF";
545 is($x, "\x{101}\x{100}\xFF\xF3");
546 is(substr($x, 0, 1), "\x{101}");
547 is(substr($x, 1, 1), "\x{100}");
548 is(substr($x, 2, 1), "\x{FF}");
549 is(substr($x, 3, 1), "\x{F3}");
551 $x = "\x{101}\x{F2}\x{F3}";
552 substr($x, -1, -1) = "\x{100}\xFF";
554 is($x, "\x{101}\xF2\x{100}\xFF\xF3");
555 is(substr($x, 0, 1), "\x{101}");
556 is(substr($x, 1, 1), "\x{F2}");
557 is(substr($x, 2, 1), "\x{100}");
558 is(substr($x, 3, 1), "\x{FF}");
559 is(substr($x, 4, 1), "\x{F3}");
561 substr($x = "ab", 0, 0, "\x{100}\x{200}");
562 is($x, "\x{100}\x{200}ab");
564 substr($x = "\x{100}\x{200}", 0, 0, "ab");
565 is($x, "ab\x{100}\x{200}");
567 substr($x = "ab", 1, 0, "\x{100}\x{200}");
568 is($x, "a\x{100}\x{200}b");
570 substr($x = "\x{100}\x{200}", 1, 0, "ab");
571 is($x, "\x{100}ab\x{200}");
573 substr($x = "ab", 2, 0, "\x{100}\x{200}");
574 is($x, "ab\x{100}\x{200}");
576 substr($x = "\x{100}\x{200}", 2, 0, "ab");
577 is($x, "\x{100}\x{200}ab");
579 substr($x = "\xFFb", 0, 0, "\x{100}\x{200}");
580 is($x, "\x{100}\x{200}\xFFb");
582 substr($x = "\x{100}\x{200}", 0, 0, "\xFFb");
583 is($x, "\xFFb\x{100}\x{200}");
585 substr($x = "\xFFb", 1, 0, "\x{100}\x{200}");
586 is($x, "\xFF\x{100}\x{200}b");
588 substr($x = "\x{100}\x{200}", 1, 0, "\xFFb");
589 is($x, "\x{100}\xFFb\x{200}");
591 substr($x = "\xFFb", 2, 0, "\x{100}\x{200}");
592 is($x, "\xFFb\x{100}\x{200}");
594 substr($x = "\x{100}\x{200}", 2, 0, "\xFFb");
595 is($x, "\x{100}\x{200}\xFFb");
601 $r[$_] = \ substr $s, $_, 1 for (0, 1);
602 is(join("", map { $$_ } @r), "ab");
608 substr($_[0],0,1) ^= substr($_[0],1,1) ^=
609 substr($_[0],0,1) ^= substr($_[0],1,1);
611 my $x = my $y = 'AB'; ss $x; ss $y;
617 my $x = "0123456789\x{500}";
618 my $y = substr $x, 4;
619 is(substr($x, 7, 1), "7");
622 # multiple assignments to lvalue [perl #24346]
625 for (substr($x,1,3)) {
633 $_ = "\xF1\xF2\xF3\xF4\xF5\xF6";
634 is($_, "\xF1\xF2\xF3\xF4\xF5\xF6");
635 is($x, "a\xF1\xF2\xF3\xF4\xF5\xF6ef");
646 $x .= "frompswiggle";
647 is $_, "XXfrompswiggle";
650 for (substr($x,1,-1)) {
655 $x .= "frompswiggle";
656 is $_, "XXffrompswiggl";
659 for (substr($x,-5,3)) {
661 $_ = 'XX'; # now $_ is substr($x, -4, 2)
664 $x .= "frompswiggle";
668 for (substr($x,-5)) {
670 $_ = 'XX'; # now substr($x, -2)
673 $x .= "frompswiggle";
677 for (substr($x,-5,-1)) {
679 $_ = 'XX'; # now substr($x, -3, -1)
682 $x .= "frompswiggle";
687 # [perl #24200] string corruption with lvalue sub
690 sub bar: lvalue { substr $krunch, 0 }
693 $krunch = '123456789';
694 is(bar, '123456789');
699 my $text = "0123456789\xED ";
700 utf8::upgrade($text);
703 my $a = substr($text, $pos, $pos);
704 is(substr($text,$pos,1), $pos);
710 my $a = pack("C", 0xbf);
711 substr($a, -1) &= chr(0xfeff);
715 # [perl #34976] incorrect caching of utf8 substr length
717 my $a = "abcd\x{100}";
718 is(substr($a,1,2), 'bc');
719 is(substr($a,1,1), 'b');
722 # [perl #62646] offsets exceeding 32 bits on 64-bit system
724 skip("32-bit system", 24) unless ~0 > 0xffffffff;
732 $r = substr($a, 0xffffffff, 1);
737 $r = substr($a, 0xffffffff+1, 1);
742 ok( !eval { $r = substr($s=$a, 0xffffffff, 1, "_"); 1 } );
748 ok( !eval { $r = substr($s=$a, 0xffffffff+1, 1, "_"); 1 } );
757 # [perl #77692] UTF8 cache not being reset when TARG is reused
759 local ${^UTF8CACHE} = -1;
762 my $dummy = length(substr("\x{100}",0,$i));
765 }, 'UTF8 cache is reset when TARG is reused [perl #77692]';
769 use open qw( :utf8 :std );
773 substr $t, 0, 0, *ワルド;
774 is($t, "*main::ワルド", "substr works on UTF-8 globs");
777 substr $t, 0, 9, *ザ::ワルド;
778 is($t, "*ザ::ワルド!", "substr works on a UTF-8 glob + stash");
783 my $y = \substr *foo, 0, 0;
784 is ref \$x, 'GLOB', '\substr does not coerce its glob arg just yet';
786 $y = \substr *foo, 0, 0;
787 is ref \$x, 'REF', '\substr does not coerce its ref arg just yet';
790 } # sub run_tests - put tests above this line that can run in threads
794 { package Class; DESTROY { ++$destroyed; } }
800 $x = bless({}, 'Class');
802 is($destroyed, 1, 'Timely scalar destruction with lvalue substr');
807 my ($word, $replace) = @_;
808 my $ref = \substr($word, 0, 1);
810 if ($replace eq "b") {
811 $result_3363 = $word;
816 a_3363($_, "v") for "test";
818 is($result_3363, "best", "ref-to-substr retains lvalue-ness under recursion [perl #3363]");