1#!./perl 2 3print "1..13\n"; 4 5$a = 'ab' . 'c'; # compile time 6$b = 'def'; 7 8$c = $a . $b; 9print "#1\t:$c: eq :abcdef:\n"; 10if ($c eq 'abcdef') {print "ok 1\n";} else {print "not ok 1\n";} 11 12$c .= 'xyz'; 13print "#2\t:$c: eq :abcdefxyz:\n"; 14if ($c eq 'abcdefxyz') {print "ok 2\n";} else {print "not ok 2\n";} 15 16$_ = $a; 17$_ .= $b; 18print "#3\t:$_: eq :abcdef:\n"; 19if ($_ eq 'abcdef') {print "ok 3\n";} else {print "not ok 3\n";} 20 21# test that when right argument of concat is UTF8, and is the same 22# variable as the target, and the left argument is not UTF8, it no 23# longer frees the wrong string. 24{ 25 sub r2 { 26 my $string = ''; 27 $string .= pack("U0a*", 'mnopqrstuvwx'); 28 $string = "abcdefghijkl$string"; 29 } 30 31 r2() and print "ok $_\n" for qw/ 4 5 /; 32} 33 34# test that nul bytes get copied 35{ 36 my ($a, $ab) = ("a", "a\0b"); 37 my ($ua, $uab) = map pack("U0a*", $_), $a, $ab; 38 39 my $ub = pack("U0a*", 'b'); 40 41 my $t1 = $a; $t1 .= $ab; 42 43 print $t1 =~ /b/ ? "ok 6\n" : "not ok 6\t# $t1\n"; 44 45 my $t2 = $a; $t2 .= $uab; 46 47 print eval '$t2 =~ /$ub/' ? "ok 7\n" : "not ok 7\t# $t2\n"; 48 49 my $t3 = $ua; $t3 .= $ab; 50 51 print $t3 =~ /$ub/ ? "ok 8\n" : "not ok 8\t# $t3\n"; 52 53 my $t4 = $ua; $t4 .= $uab; 54 55 print eval '$t4 =~ /$ub/' ? "ok 9\n" : "not ok 9\t# $t4\n"; 56 57 my $t5 = $a; $t5 = $ab . $t5; 58 59 print $t5 =~ /$ub/ ? "ok 10\n" : "not ok 10\t# $t5\n"; 60 61 my $t6 = $a; $t6 = $uab . $t6; 62 63 print eval '$t6 =~ /$ub/' ? "ok 11\n" : "not ok 11\t# $t6\n"; 64 65 my $t7 = $ua; $t7 = $ab . $t7; 66 67 print $t7 =~ /$ub/ ? "ok 12\n" : "not ok 12\t# $t7\n"; 68 69 my $t8 = $ua; $t8 = $uab . $t8; 70 71 print eval '$t8 =~ /$ub/' ? "ok 13\n" : "not ok 13\t# $t8\n"; 72} 73