191f110e0Safresh1#!./perl 291f110e0Safresh1 391f110e0Safresh1BEGIN { 491f110e0Safresh1 chdir 't' if -d 't'; 591f110e0Safresh1 @INC = '../lib'; 691f110e0Safresh1} 791f110e0Safresh1 89f11ffb7Safresh1# ok()/is() functions from other sources (e.g., t/test.pl) may use 99f11ffb7Safresh1# concatenation, but that is what is being tested in this file. Hence, we 109f11ffb7Safresh1# place this file in the directory where do not use t/test.pl, and we 119f11ffb7Safresh1# write functions specially written to avoid any concatenation. 1291f110e0Safresh1 1391f110e0Safresh1my $test = 1; 149f11ffb7Safresh1 1591f110e0Safresh1sub ok { 1691f110e0Safresh1 my($ok, $name) = @_; 1791f110e0Safresh1 1891f110e0Safresh1 printf "%sok %d - %s\n", ($ok ? "" : "not "), $test, $name; 1991f110e0Safresh1 2091f110e0Safresh1 printf "# Failed test at line %d\n", (caller)[2] unless $ok; 2191f110e0Safresh1 2291f110e0Safresh1 $test++; 2391f110e0Safresh1 return $ok; 2491f110e0Safresh1} 2591f110e0Safresh1 269f11ffb7Safresh1sub is { 279f11ffb7Safresh1 my($got, $expected, $name) = @_; 289f11ffb7Safresh1 299f11ffb7Safresh1 my $ok = $got eq $expected; 309f11ffb7Safresh1 319f11ffb7Safresh1 printf "%sok %d - %s\n", ($ok ? "" : "not "), $test, $name; 329f11ffb7Safresh1 339f11ffb7Safresh1 if (!$ok) { 349f11ffb7Safresh1 printf "# Failed test at line %d\n", (caller)[2]; 359f11ffb7Safresh1 printf "# got: %s\n#expected: %s\n", $got, $expected; 369f11ffb7Safresh1 } 379f11ffb7Safresh1 389f11ffb7Safresh1 $test++; 399f11ffb7Safresh1 return $ok; 409f11ffb7Safresh1} 419f11ffb7Safresh1 42*b46d8ef2Safresh1print "1..254\n"; 4391f110e0Safresh1 4491f110e0Safresh1($a, $b, $c) = qw(foo bar); 4591f110e0Safresh1 4691f110e0Safresh1ok("$a" eq "foo", "verifying assign"); 4791f110e0Safresh1ok("$a$b" eq "foobar", "basic concatenation"); 4891f110e0Safresh1ok("$c$a$c" eq "foo", "concatenate undef, fore and aft"); 4991f110e0Safresh1 5091f110e0Safresh1# Okay, so that wasn't very challenging. Let's go Unicode. 5191f110e0Safresh1 5291f110e0Safresh1{ 539f11ffb7Safresh1 # bug id 20000819.004 (#3761) 5491f110e0Safresh1 5591f110e0Safresh1 $_ = $dx = "\x{10f2}"; 5691f110e0Safresh1 s/($dx)/$dx$1/; 5791f110e0Safresh1 { 589f11ffb7Safresh1 ok($_ eq "$dx$dx","bug id 20000819.004 (#3761), back"); 5991f110e0Safresh1 } 6091f110e0Safresh1 6191f110e0Safresh1 $_ = $dx = "\x{10f2}"; 6291f110e0Safresh1 s/($dx)/$1$dx/; 6391f110e0Safresh1 { 649f11ffb7Safresh1 ok($_ eq "$dx$dx","bug id 20000819.004 (#3761), front"); 6591f110e0Safresh1 } 6691f110e0Safresh1 6791f110e0Safresh1 $dx = "\x{10f2}"; 6891f110e0Safresh1 $_ = "\x{10f2}\x{10f2}"; 6991f110e0Safresh1 s/($dx)($dx)/$1$2/; 7091f110e0Safresh1 { 719f11ffb7Safresh1 ok($_ eq "$dx$dx","bug id 20000819.004 (#3761), front and back"); 7291f110e0Safresh1 } 7391f110e0Safresh1} 7491f110e0Safresh1 7591f110e0Safresh1{ 769f11ffb7Safresh1 # bug id 20000901.092 (#4184) 7791f110e0Safresh1 # test that undef left and right of utf8 results in a valid string 7891f110e0Safresh1 7991f110e0Safresh1 my $a; 8091f110e0Safresh1 $a .= "\x{1ff}"; 819f11ffb7Safresh1 ok($a eq "\x{1ff}", "bug id 20000901.092 (#4184), undef left"); 8291f110e0Safresh1 $a .= undef; 839f11ffb7Safresh1 ok($a eq "\x{1ff}", "bug id 20000901.092 (#4184), undef right"); 8491f110e0Safresh1} 8591f110e0Safresh1 8691f110e0Safresh1{ 879f11ffb7Safresh1 # ID 20001020.006 (#4484) 8891f110e0Safresh1 8991f110e0Safresh1 "x" =~ /(.)/; # unset $2 9091f110e0Safresh1 9191f110e0Safresh1 # Without the fix this 5.7.0 would croak: 9291f110e0Safresh1 # Modification of a read-only value attempted at ... 9391f110e0Safresh1 eval {"$2\x{1234}"}; 949f11ffb7Safresh1 ok(!$@, "bug id 20001020.006 (#4484), left"); 9591f110e0Safresh1 9691f110e0Safresh1 # For symmetry with the above. 9791f110e0Safresh1 eval {"\x{1234}$2"}; 989f11ffb7Safresh1 ok(!$@, "bug id 20001020.006 (#4484), right"); 9991f110e0Safresh1 10091f110e0Safresh1 *pi = \undef; 10191f110e0Safresh1 # This bug existed earlier than the $2 bug, but is fixed with the same 10291f110e0Safresh1 # patch. Without the fix this 5.7.0 would also croak: 10391f110e0Safresh1 # Modification of a read-only value attempted at ... 10491f110e0Safresh1 eval{"$pi\x{1234}"}; 1059f11ffb7Safresh1 ok(!$@, "bug id 20001020.006 (#4484), constant left"); 10691f110e0Safresh1 10791f110e0Safresh1 # For symmetry with the above. 10891f110e0Safresh1 eval{"\x{1234}$pi"}; 1099f11ffb7Safresh1 ok(!$@, "bug id 20001020.006 (#4484), constant right"); 11091f110e0Safresh1} 11191f110e0Safresh1 11291f110e0Safresh1sub beq { use bytes; $_[0] eq $_[1]; } 11391f110e0Safresh1 11491f110e0Safresh1{ 11591f110e0Safresh1 # concat should not upgrade its arguments. 11691f110e0Safresh1 my($l, $r, $c); 11791f110e0Safresh1 11891f110e0Safresh1 ($l, $r, $c) = ("\x{101}", "\x{fe}", "\x{101}\x{fe}"); 11991f110e0Safresh1 ok(beq($l.$r, $c), "concat utf8 and byte"); 12091f110e0Safresh1 ok(beq($l, "\x{101}"), "right not changed after concat u+b"); 12191f110e0Safresh1 ok(beq($r, "\x{fe}"), "left not changed after concat u+b"); 12291f110e0Safresh1 12391f110e0Safresh1 ($l, $r, $c) = ("\x{fe}", "\x{101}", "\x{fe}\x{101}"); 12491f110e0Safresh1 ok(beq($l.$r, $c), "concat byte and utf8"); 12591f110e0Safresh1 ok(beq($l, "\x{fe}"), "right not changed after concat b+u"); 12691f110e0Safresh1 ok(beq($r, "\x{101}"), "left not changed after concat b+u"); 12791f110e0Safresh1} 12891f110e0Safresh1 12991f110e0Safresh1{ 13091f110e0Safresh1 my $a; ($a .= 5) . 6; 13191f110e0Safresh1 ok($a == 5, '($a .= 5) . 6 - present since 5.000'); 13291f110e0Safresh1} 13391f110e0Safresh1 13491f110e0Safresh1{ 13591f110e0Safresh1 # [perl #24508] optree construction bug 13691f110e0Safresh1 sub strfoo { "x" } 13791f110e0Safresh1 my ($x, $y); 13891f110e0Safresh1 $y = ($x = '' . strfoo()) . "y"; 13991f110e0Safresh1 ok( "$x,$y" eq "x,xy", 'figures out correct target' ); 14091f110e0Safresh1} 14191f110e0Safresh1 14291f110e0Safresh1{ 14391f110e0Safresh1 # [perl #26905] "use bytes" doesn't apply byte semantics to concatenation 14491f110e0Safresh1 14591f110e0Safresh1 my $p = "\xB6"; # PILCROW SIGN (ASCII/EBCDIC), 2bytes in UTF-X 14691f110e0Safresh1 my $u = "\x{100}"; 14791f110e0Safresh1 my $b = pack 'a*', "\x{100}"; 14891f110e0Safresh1 my $pu = "\xB6\x{100}"; 14991f110e0Safresh1 my $up = "\x{100}\xB6"; 15091f110e0Safresh1 my $x1 = $p; 15191f110e0Safresh1 my $y1 = $u; 1529f11ffb7Safresh1 my ($x2, $x3, $x4, $y2); 15391f110e0Safresh1 15491f110e0Safresh1 use bytes; 15591f110e0Safresh1 ok(beq($p.$u, $p.$b), "perl #26905, left eq bytes"); 15691f110e0Safresh1 ok(beq($u.$p, $b.$p), "perl #26905, right eq bytes"); 15791f110e0Safresh1 ok(!beq($p.$u, $pu), "perl #26905, left ne unicode"); 15891f110e0Safresh1 ok(!beq($u.$p, $up), "perl #26905, right ne unicode"); 15991f110e0Safresh1 16091f110e0Safresh1 $x1 .= $u; 16191f110e0Safresh1 $x2 = $p . $u; 16291f110e0Safresh1 $y1 .= $p; 16391f110e0Safresh1 $y2 = $u . $p; 16491f110e0Safresh1 1659f11ffb7Safresh1 $x3 = $p; $x3 .= $u . $u; 1669f11ffb7Safresh1 $x4 = $p . $u . $u; 1679f11ffb7Safresh1 16891f110e0Safresh1 no bytes; 16991f110e0Safresh1 ok(beq($x1, $x2), "perl #26905, left, .= vs = . in bytes"); 17091f110e0Safresh1 ok(beq($y1, $y2), "perl #26905, right, .= vs = . in bytes"); 17191f110e0Safresh1 ok(($x1 eq $x2), "perl #26905, left, .= vs = . in chars"); 17291f110e0Safresh1 ok(($y1 eq $y2), "perl #26905, right, .= vs = . in chars"); 1739f11ffb7Safresh1 ok(($x3 eq $x4), "perl #26905, twin, .= vs = . in chars"); 17491f110e0Safresh1} 17591f110e0Safresh1 17691f110e0Safresh1{ 17791f110e0Safresh1 # Concatenation needs to preserve UTF8ness of left oper. 17891f110e0Safresh1 my $x = eval"qr/\x{fff}/"; 17991f110e0Safresh1 ok( ord chop($x .= "\303\277") == 191, "UTF8ness preserved" ); 18091f110e0Safresh1} 18191f110e0Safresh1 18291f110e0Safresh1{ 18391f110e0Safresh1 my $x; 18491f110e0Safresh1 $x = "a" . "b"; 18591f110e0Safresh1 $x .= "-append-"; 18691f110e0Safresh1 ok($x eq "ab-append-", "Appending to something initialized using constant folding"); 18791f110e0Safresh1} 188b8851fccSafresh1 1899f11ffb7Safresh1# non-POK consts 1909f11ffb7Safresh1 1919f11ffb7Safresh1{ 1929f11ffb7Safresh1 my $a = "a"; 1939f11ffb7Safresh1 my $b; 1949f11ffb7Safresh1 $b = $a . $a . 1; 1959f11ffb7Safresh1 ok($b eq "aa1", "aa1"); 1969f11ffb7Safresh1 $b = 2 . $a . $a; 1979f11ffb7Safresh1 ok($b eq "2aa", "2aa"); 1989f11ffb7Safresh1} 1999f11ffb7Safresh1 200b8851fccSafresh1# [perl #124160] 201b8851fccSafresh1package o { use overload "." => sub { $_[0] }, fallback => 1 } 202b8851fccSafresh1$o = bless [], "o"; 203b8851fccSafresh1ok(ref(CORE::state $y = "a $o b") eq 'o', 204b8851fccSafresh1 'state $y = "foo $bar baz" does not stringify; only concats'); 2059f11ffb7Safresh1 2069f11ffb7Safresh1 2079f11ffb7Safresh1# multiconcat: utf8 dest with non-utf8 args should grow dest sufficiently. 2089f11ffb7Safresh1# This is mainly for valgrind or ASAN to detect problems with. 2099f11ffb7Safresh1 2109f11ffb7Safresh1{ 2119f11ffb7Safresh1 my $s = "\x{100}"; 2129f11ffb7Safresh1 my $t = "\x80" x 1024; 2139f11ffb7Safresh1 $s .= "-$t-"; 2149f11ffb7Safresh1 ok length($s) == 1027, "utf8 dest with non-utf8 args"; 2159f11ffb7Safresh1} 2169f11ffb7Safresh1 2179f11ffb7Safresh1# target on RHS 2189f11ffb7Safresh1 2199f11ffb7Safresh1{ 2209f11ffb7Safresh1 my $a = "abc"; 2219f11ffb7Safresh1 $a .= $a; 2229f11ffb7Safresh1 ok($a eq 'abcabc', 'append self'); 2239f11ffb7Safresh1 2249f11ffb7Safresh1 $a = "abc"; 2259f11ffb7Safresh1 $a = $a . $a; 2269f11ffb7Safresh1 ok($a eq 'abcabc', 'double self'); 2279f11ffb7Safresh1 2289f11ffb7Safresh1 $a = "abc"; 2299f11ffb7Safresh1 $a .= $a . $a; 2309f11ffb7Safresh1 ok($a eq 'abcabcabc', 'append double self'); 2319f11ffb7Safresh1 2329f11ffb7Safresh1 $a = "abc"; 2339f11ffb7Safresh1 $a = "$a-$a"; 2349f11ffb7Safresh1 ok($a eq 'abc-abc', 'double self with const'); 2359f11ffb7Safresh1 2369f11ffb7Safresh1 $a = "abc"; 2379f11ffb7Safresh1 $a .= "$a-$a"; 2389f11ffb7Safresh1 ok($a eq 'abcabc-abc', 'append double self with const'); 2399f11ffb7Safresh1 2409f11ffb7Safresh1 $a = "abc"; 2419f11ffb7Safresh1 $a .= $a . $a . $a; 2429f11ffb7Safresh1 ok($a eq 'abcabcabcabc', 'append triple self'); 2439f11ffb7Safresh1 2449f11ffb7Safresh1 $a = "abc"; 2459f11ffb7Safresh1 $a = "$a-$a=$a"; 2469f11ffb7Safresh1 ok($a eq 'abc-abc=abc', 'triple self with const'); 2479f11ffb7Safresh1 2489f11ffb7Safresh1 $a = "abc"; 2499f11ffb7Safresh1 $a .= "$a-$a=$a"; 2509f11ffb7Safresh1 ok($a eq 'abcabc-abc=abc', 'append triple self with const'); 2519f11ffb7Safresh1} 2529f11ffb7Safresh1 2539f11ffb7Safresh1# test the sorts of optree which may (or may not) get optimised into 2549f11ffb7Safresh1# a single MULTICONCAT op. It's based on a loop in t/perf/opcount.t, 2559f11ffb7Safresh1# but here the loop is unwound as we would need to use concat to 2569f11ffb7Safresh1# generate the expected results to compare with the actual results, 2579f11ffb7Safresh1# which would rather defeat the object. 2589f11ffb7Safresh1 2599f11ffb7Safresh1{ 2609f11ffb7Safresh1 my ($a1, $a2, $a3) = qw(1 2 3); 2619f11ffb7Safresh1 our $pkg; 2629f11ffb7Safresh1 my $lex; 2639f11ffb7Safresh1 2649f11ffb7Safresh1 is("-", '-', '"-"'); 2659f11ffb7Safresh1 is("-", '-', '"-"'); 2669f11ffb7Safresh1 is("-", '-', '"-"'); 2679f11ffb7Safresh1 is("-", '-', '"-"'); 2689f11ffb7Safresh1 is($a1, '1', '$a1'); 2699f11ffb7Safresh1 is("-".$a1, '-1', '"-".$a1'); 2709f11ffb7Safresh1 is($a1."-", '1-', '$a1."-"'); 2719f11ffb7Safresh1 is("-".$a1."-", '-1-', '"-".$a1."-"'); 2729f11ffb7Safresh1 is("$a1", '1', '"$a1"'); 2739f11ffb7Safresh1 is("-$a1", '-1', '"-$a1"'); 2749f11ffb7Safresh1 is("$a1-", '1-', '"$a1-"'); 2759f11ffb7Safresh1 is("-$a1-", '-1-', '"-$a1-"'); 2769f11ffb7Safresh1 is($a1.$a2, '12', '$a1.$a2'); 2779f11ffb7Safresh1 is($a1."-".$a2, '1-2', '$a1."-".$a2'); 2789f11ffb7Safresh1 is("-".$a1."-".$a2, '-1-2', '"-".$a1."-".$a2'); 2799f11ffb7Safresh1 is($a1."-".$a2."-", '1-2-', '$a1."-".$a2."-"'); 2809f11ffb7Safresh1 is("-".$a1."-".$a2."-", '-1-2-', '"-".$a1."-".$a2."-"'); 2819f11ffb7Safresh1 is("$a1$a2", '12', '"$a1$a2"'); 2829f11ffb7Safresh1 is("$a1-$a2", '1-2', '"$a1-$a2"'); 2839f11ffb7Safresh1 is("-$a1-$a2", '-1-2', '"-$a1-$a2"'); 2849f11ffb7Safresh1 is("$a1-$a2-", '1-2-', '"$a1-$a2-"'); 2859f11ffb7Safresh1 is("-$a1-$a2-", '-1-2-', '"-$a1-$a2-"'); 2869f11ffb7Safresh1 is($a1.$a2.$a3, '123', '$a1.$a2.$a3'); 2879f11ffb7Safresh1 is($a1."-".$a2."-".$a3, '1-2-3', '$a1."-".$a2."-".$a3'); 2889f11ffb7Safresh1 is("-".$a1."-".$a2."-".$a3, '-1-2-3', '"-".$a1."-".$a2."-".$a3'); 2899f11ffb7Safresh1 is($a1."-".$a2."-".$a3."-", '1-2-3-', '$a1."-".$a2."-".$a3."-"'); 2909f11ffb7Safresh1 is("-".$a1."-".$a2."-".$a3."-", '-1-2-3-', '"-".$a1."-".$a2."-".$a3."-"'); 2919f11ffb7Safresh1 is("$a1$a2$a3", '123', '"$a1$a2$a3"'); 2929f11ffb7Safresh1 is("$a1-$a2-$a3", '1-2-3', '"$a1-$a2-$a3"'); 2939f11ffb7Safresh1 is("-$a1-$a2-$a3", '-1-2-3', '"-$a1-$a2-$a3"'); 2949f11ffb7Safresh1 is("$a1-$a2-$a3-", '1-2-3-', '"$a1-$a2-$a3-"'); 2959f11ffb7Safresh1 is("-$a1-$a2-$a3-", '-1-2-3-', '"-$a1-$a2-$a3-"'); 2969f11ffb7Safresh1 $pkg = "-"; 2979f11ffb7Safresh1 is($pkg, '-', '$pkg = "-"'); 2989f11ffb7Safresh1 $pkg = "-"; 2999f11ffb7Safresh1 is($pkg, '-', '$pkg = "-"'); 3009f11ffb7Safresh1 $pkg = "-"; 3019f11ffb7Safresh1 is($pkg, '-', '$pkg = "-"'); 3029f11ffb7Safresh1 $pkg = "-"; 3039f11ffb7Safresh1 is($pkg, '-', '$pkg = "-"'); 3049f11ffb7Safresh1 $pkg = $a1; 3059f11ffb7Safresh1 is($pkg, '1', '$pkg = $a1'); 3069f11ffb7Safresh1 $pkg = "-".$a1; 3079f11ffb7Safresh1 is($pkg, '-1', '$pkg = "-".$a1'); 3089f11ffb7Safresh1 $pkg = $a1."-"; 3099f11ffb7Safresh1 is($pkg, '1-', '$pkg = $a1."-"'); 3109f11ffb7Safresh1 $pkg = "-".$a1."-"; 3119f11ffb7Safresh1 is($pkg, '-1-', '$pkg = "-".$a1."-"'); 3129f11ffb7Safresh1 $pkg = "$a1"; 3139f11ffb7Safresh1 is($pkg, '1', '$pkg = "$a1"'); 3149f11ffb7Safresh1 $pkg = "-$a1"; 3159f11ffb7Safresh1 is($pkg, '-1', '$pkg = "-$a1"'); 3169f11ffb7Safresh1 $pkg = "$a1-"; 3179f11ffb7Safresh1 is($pkg, '1-', '$pkg = "$a1-"'); 3189f11ffb7Safresh1 $pkg = "-$a1-"; 3199f11ffb7Safresh1 is($pkg, '-1-', '$pkg = "-$a1-"'); 3209f11ffb7Safresh1 $pkg = $a1.$a2; 3219f11ffb7Safresh1 is($pkg, '12', '$pkg = $a1.$a2'); 3229f11ffb7Safresh1 $pkg = $a1."-".$a2; 3239f11ffb7Safresh1 is($pkg, '1-2', '$pkg = $a1."-".$a2'); 3249f11ffb7Safresh1 $pkg = "-".$a1."-".$a2; 3259f11ffb7Safresh1 is($pkg, '-1-2', '$pkg = "-".$a1."-".$a2'); 3269f11ffb7Safresh1 $pkg = $a1."-".$a2."-"; 3279f11ffb7Safresh1 is($pkg, '1-2-', '$pkg = $a1."-".$a2."-"'); 3289f11ffb7Safresh1 $pkg = "-".$a1."-".$a2."-"; 3299f11ffb7Safresh1 is($pkg, '-1-2-', '$pkg = "-".$a1."-".$a2."-"'); 3309f11ffb7Safresh1 $pkg = "$a1$a2"; 3319f11ffb7Safresh1 is($pkg, '12', '$pkg = "$a1$a2"'); 3329f11ffb7Safresh1 $pkg = "$a1-$a2"; 3339f11ffb7Safresh1 is($pkg, '1-2', '$pkg = "$a1-$a2"'); 3349f11ffb7Safresh1 $pkg = "-$a1-$a2"; 3359f11ffb7Safresh1 is($pkg, '-1-2', '$pkg = "-$a1-$a2"'); 3369f11ffb7Safresh1 $pkg = "$a1-$a2-"; 3379f11ffb7Safresh1 is($pkg, '1-2-', '$pkg = "$a1-$a2-"'); 3389f11ffb7Safresh1 $pkg = "-$a1-$a2-"; 3399f11ffb7Safresh1 is($pkg, '-1-2-', '$pkg = "-$a1-$a2-"'); 3409f11ffb7Safresh1 $pkg = $a1.$a2.$a3; 3419f11ffb7Safresh1 is($pkg, '123', '$pkg = $a1.$a2.$a3'); 3429f11ffb7Safresh1 $pkg = $a1."-".$a2."-".$a3; 3439f11ffb7Safresh1 is($pkg, '1-2-3', '$pkg = $a1."-".$a2."-".$a3'); 3449f11ffb7Safresh1 $pkg = "-".$a1."-".$a2."-".$a3; 3459f11ffb7Safresh1 is($pkg, '-1-2-3', '$pkg = "-".$a1."-".$a2."-".$a3'); 3469f11ffb7Safresh1 $pkg = $a1."-".$a2."-".$a3."-"; 3479f11ffb7Safresh1 is($pkg, '1-2-3-', '$pkg = $a1."-".$a2."-".$a3."-"'); 3489f11ffb7Safresh1 $pkg = "-".$a1."-".$a2."-".$a3."-"; 3499f11ffb7Safresh1 is($pkg, '-1-2-3-', '$pkg = "-".$a1."-".$a2."-".$a3."-"'); 3509f11ffb7Safresh1 $pkg = "$a1$a2$a3"; 3519f11ffb7Safresh1 is($pkg, '123', '$pkg = "$a1$a2$a3"'); 3529f11ffb7Safresh1 $pkg = "$a1-$a2-$a3"; 3539f11ffb7Safresh1 is($pkg, '1-2-3', '$pkg = "$a1-$a2-$a3"'); 3549f11ffb7Safresh1 $pkg = "-$a1-$a2-$a3"; 3559f11ffb7Safresh1 is($pkg, '-1-2-3', '$pkg = "-$a1-$a2-$a3"'); 3569f11ffb7Safresh1 $pkg = "$a1-$a2-$a3-"; 3579f11ffb7Safresh1 is($pkg, '1-2-3-', '$pkg = "$a1-$a2-$a3-"'); 3589f11ffb7Safresh1 $pkg = "-$a1-$a2-$a3-"; 3599f11ffb7Safresh1 is($pkg, '-1-2-3-', '$pkg = "-$a1-$a2-$a3-"'); 3609f11ffb7Safresh1 $pkg = 'P'; 3619f11ffb7Safresh1 $pkg .= "-"; 3629f11ffb7Safresh1 is($pkg, 'P-', '$pkg .= "-"'); 3639f11ffb7Safresh1 $pkg = 'P'; 3649f11ffb7Safresh1 $pkg .= "-"; 3659f11ffb7Safresh1 is($pkg, 'P-', '$pkg .= "-"'); 3669f11ffb7Safresh1 $pkg = 'P'; 3679f11ffb7Safresh1 $pkg .= "-"; 3689f11ffb7Safresh1 is($pkg, 'P-', '$pkg .= "-"'); 3699f11ffb7Safresh1 $pkg = 'P'; 3709f11ffb7Safresh1 $pkg .= "-"; 3719f11ffb7Safresh1 is($pkg, 'P-', '$pkg .= "-"'); 3729f11ffb7Safresh1 $pkg = 'P'; 3739f11ffb7Safresh1 $pkg .= $a1; 3749f11ffb7Safresh1 is($pkg, 'P1', '$pkg .= $a1'); 3759f11ffb7Safresh1 $pkg = 'P'; 3769f11ffb7Safresh1 $pkg .= "-".$a1; 3779f11ffb7Safresh1 is($pkg, 'P-1', '$pkg .= "-".$a1'); 3789f11ffb7Safresh1 $pkg = 'P'; 3799f11ffb7Safresh1 $pkg .= $a1."-"; 3809f11ffb7Safresh1 is($pkg, 'P1-', '$pkg .= $a1."-"'); 3819f11ffb7Safresh1 $pkg = 'P'; 3829f11ffb7Safresh1 $pkg .= "-".$a1."-"; 3839f11ffb7Safresh1 is($pkg, 'P-1-', '$pkg .= "-".$a1."-"'); 3849f11ffb7Safresh1 $pkg = 'P'; 3859f11ffb7Safresh1 $pkg .= "$a1"; 3869f11ffb7Safresh1 is($pkg, 'P1', '$pkg .= "$a1"'); 3879f11ffb7Safresh1 $pkg = 'P'; 3889f11ffb7Safresh1 $pkg .= "-$a1"; 3899f11ffb7Safresh1 is($pkg, 'P-1', '$pkg .= "-$a1"'); 3909f11ffb7Safresh1 $pkg = 'P'; 3919f11ffb7Safresh1 $pkg .= "$a1-"; 3929f11ffb7Safresh1 is($pkg, 'P1-', '$pkg .= "$a1-"'); 3939f11ffb7Safresh1 $pkg = 'P'; 3949f11ffb7Safresh1 $pkg .= "-$a1-"; 3959f11ffb7Safresh1 is($pkg, 'P-1-', '$pkg .= "-$a1-"'); 3969f11ffb7Safresh1 $pkg = 'P'; 3979f11ffb7Safresh1 $pkg .= $a1.$a2; 3989f11ffb7Safresh1 is($pkg, 'P12', '$pkg .= $a1.$a2'); 3999f11ffb7Safresh1 $pkg = 'P'; 4009f11ffb7Safresh1 $pkg .= $a1."-".$a2; 4019f11ffb7Safresh1 is($pkg, 'P1-2', '$pkg .= $a1."-".$a2'); 4029f11ffb7Safresh1 $pkg = 'P'; 4039f11ffb7Safresh1 $pkg .= "-".$a1."-".$a2; 4049f11ffb7Safresh1 is($pkg, 'P-1-2', '$pkg .= "-".$a1."-".$a2'); 4059f11ffb7Safresh1 $pkg = 'P'; 4069f11ffb7Safresh1 $pkg .= $a1."-".$a2."-"; 4079f11ffb7Safresh1 is($pkg, 'P1-2-', '$pkg .= $a1."-".$a2."-"'); 4089f11ffb7Safresh1 $pkg = 'P'; 4099f11ffb7Safresh1 $pkg .= "-".$a1."-".$a2."-"; 4109f11ffb7Safresh1 is($pkg, 'P-1-2-', '$pkg .= "-".$a1."-".$a2."-"'); 4119f11ffb7Safresh1 $pkg = 'P'; 4129f11ffb7Safresh1 $pkg .= "$a1$a2"; 4139f11ffb7Safresh1 is($pkg, 'P12', '$pkg .= "$a1$a2"'); 4149f11ffb7Safresh1 $pkg = 'P'; 4159f11ffb7Safresh1 $pkg .= "$a1-$a2"; 4169f11ffb7Safresh1 is($pkg, 'P1-2', '$pkg .= "$a1-$a2"'); 4179f11ffb7Safresh1 $pkg = 'P'; 4189f11ffb7Safresh1 $pkg .= "-$a1-$a2"; 4199f11ffb7Safresh1 is($pkg, 'P-1-2', '$pkg .= "-$a1-$a2"'); 4209f11ffb7Safresh1 $pkg = 'P'; 4219f11ffb7Safresh1 $pkg .= "$a1-$a2-"; 4229f11ffb7Safresh1 is($pkg, 'P1-2-', '$pkg .= "$a1-$a2-"'); 4239f11ffb7Safresh1 $pkg = 'P'; 4249f11ffb7Safresh1 $pkg .= "-$a1-$a2-"; 4259f11ffb7Safresh1 is($pkg, 'P-1-2-', '$pkg .= "-$a1-$a2-"'); 4269f11ffb7Safresh1 $pkg = 'P'; 4279f11ffb7Safresh1 $pkg .= $a1.$a2.$a3; 4289f11ffb7Safresh1 is($pkg, 'P123', '$pkg .= $a1.$a2.$a3'); 4299f11ffb7Safresh1 $pkg = 'P'; 4309f11ffb7Safresh1 $pkg .= $a1."-".$a2."-".$a3; 4319f11ffb7Safresh1 is($pkg, 'P1-2-3', '$pkg .= $a1."-".$a2."-".$a3'); 4329f11ffb7Safresh1 $pkg = 'P'; 4339f11ffb7Safresh1 $pkg .= "-".$a1."-".$a2."-".$a3; 4349f11ffb7Safresh1 is($pkg, 'P-1-2-3', '$pkg .= "-".$a1."-".$a2."-".$a3'); 4359f11ffb7Safresh1 $pkg = 'P'; 4369f11ffb7Safresh1 $pkg .= $a1."-".$a2."-".$a3."-"; 4379f11ffb7Safresh1 is($pkg, 'P1-2-3-', '$pkg .= $a1."-".$a2."-".$a3."-"'); 4389f11ffb7Safresh1 $pkg = 'P'; 4399f11ffb7Safresh1 $pkg .= "-".$a1."-".$a2."-".$a3."-"; 4409f11ffb7Safresh1 is($pkg, 'P-1-2-3-', '$pkg .= "-".$a1."-".$a2."-".$a3."-"'); 4419f11ffb7Safresh1 $pkg = 'P'; 4429f11ffb7Safresh1 $pkg .= "$a1$a2$a3"; 4439f11ffb7Safresh1 is($pkg, 'P123', '$pkg .= "$a1$a2$a3"'); 4449f11ffb7Safresh1 $pkg = 'P'; 4459f11ffb7Safresh1 $pkg .= "$a1-$a2-$a3"; 4469f11ffb7Safresh1 is($pkg, 'P1-2-3', '$pkg .= "$a1-$a2-$a3"'); 4479f11ffb7Safresh1 $pkg = 'P'; 4489f11ffb7Safresh1 $pkg .= "-$a1-$a2-$a3"; 4499f11ffb7Safresh1 is($pkg, 'P-1-2-3', '$pkg .= "-$a1-$a2-$a3"'); 4509f11ffb7Safresh1 $pkg = 'P'; 4519f11ffb7Safresh1 $pkg .= "$a1-$a2-$a3-"; 4529f11ffb7Safresh1 is($pkg, 'P1-2-3-', '$pkg .= "$a1-$a2-$a3-"'); 4539f11ffb7Safresh1 $pkg = 'P'; 4549f11ffb7Safresh1 $pkg .= "-$a1-$a2-$a3-"; 4559f11ffb7Safresh1 is($pkg, 'P-1-2-3-', '$pkg .= "-$a1-$a2-$a3-"'); 4569f11ffb7Safresh1 $lex = "-"; 4579f11ffb7Safresh1 is($lex, '-', '$lex = "-"'); 4589f11ffb7Safresh1 $lex = "-"; 4599f11ffb7Safresh1 is($lex, '-', '$lex = "-"'); 4609f11ffb7Safresh1 $lex = "-"; 4619f11ffb7Safresh1 is($lex, '-', '$lex = "-"'); 4629f11ffb7Safresh1 $lex = "-"; 4639f11ffb7Safresh1 is($lex, '-', '$lex = "-"'); 4649f11ffb7Safresh1 $lex = $a1; 4659f11ffb7Safresh1 is($lex, '1', '$lex = $a1'); 4669f11ffb7Safresh1 $lex = "-".$a1; 4679f11ffb7Safresh1 is($lex, '-1', '$lex = "-".$a1'); 4689f11ffb7Safresh1 $lex = $a1."-"; 4699f11ffb7Safresh1 is($lex, '1-', '$lex = $a1."-"'); 4709f11ffb7Safresh1 $lex = "-".$a1."-"; 4719f11ffb7Safresh1 is($lex, '-1-', '$lex = "-".$a1."-"'); 4729f11ffb7Safresh1 $lex = "$a1"; 4739f11ffb7Safresh1 is($lex, '1', '$lex = "$a1"'); 4749f11ffb7Safresh1 $lex = "-$a1"; 4759f11ffb7Safresh1 is($lex, '-1', '$lex = "-$a1"'); 4769f11ffb7Safresh1 $lex = "$a1-"; 4779f11ffb7Safresh1 is($lex, '1-', '$lex = "$a1-"'); 4789f11ffb7Safresh1 $lex = "-$a1-"; 4799f11ffb7Safresh1 is($lex, '-1-', '$lex = "-$a1-"'); 4809f11ffb7Safresh1 $lex = $a1.$a2; 4819f11ffb7Safresh1 is($lex, '12', '$lex = $a1.$a2'); 4829f11ffb7Safresh1 $lex = $a1."-".$a2; 4839f11ffb7Safresh1 is($lex, '1-2', '$lex = $a1."-".$a2'); 4849f11ffb7Safresh1 $lex = "-".$a1."-".$a2; 4859f11ffb7Safresh1 is($lex, '-1-2', '$lex = "-".$a1."-".$a2'); 4869f11ffb7Safresh1 $lex = $a1."-".$a2."-"; 4879f11ffb7Safresh1 is($lex, '1-2-', '$lex = $a1."-".$a2."-"'); 4889f11ffb7Safresh1 $lex = "-".$a1."-".$a2."-"; 4899f11ffb7Safresh1 is($lex, '-1-2-', '$lex = "-".$a1."-".$a2."-"'); 4909f11ffb7Safresh1 $lex = "$a1$a2"; 4919f11ffb7Safresh1 is($lex, '12', '$lex = "$a1$a2"'); 4929f11ffb7Safresh1 $lex = "$a1-$a2"; 4939f11ffb7Safresh1 is($lex, '1-2', '$lex = "$a1-$a2"'); 4949f11ffb7Safresh1 $lex = "-$a1-$a2"; 4959f11ffb7Safresh1 is($lex, '-1-2', '$lex = "-$a1-$a2"'); 4969f11ffb7Safresh1 $lex = "$a1-$a2-"; 4979f11ffb7Safresh1 is($lex, '1-2-', '$lex = "$a1-$a2-"'); 4989f11ffb7Safresh1 $lex = "-$a1-$a2-"; 4999f11ffb7Safresh1 is($lex, '-1-2-', '$lex = "-$a1-$a2-"'); 5009f11ffb7Safresh1 $lex = $a1.$a2.$a3; 5019f11ffb7Safresh1 is($lex, '123', '$lex = $a1.$a2.$a3'); 5029f11ffb7Safresh1 $lex = $a1."-".$a2."-".$a3; 5039f11ffb7Safresh1 is($lex, '1-2-3', '$lex = $a1."-".$a2."-".$a3'); 5049f11ffb7Safresh1 $lex = "-".$a1."-".$a2."-".$a3; 5059f11ffb7Safresh1 is($lex, '-1-2-3', '$lex = "-".$a1."-".$a2."-".$a3'); 5069f11ffb7Safresh1 $lex = $a1."-".$a2."-".$a3."-"; 5079f11ffb7Safresh1 is($lex, '1-2-3-', '$lex = $a1."-".$a2."-".$a3."-"'); 5089f11ffb7Safresh1 $lex = "-".$a1."-".$a2."-".$a3."-"; 5099f11ffb7Safresh1 is($lex, '-1-2-3-', '$lex = "-".$a1."-".$a2."-".$a3."-"'); 5109f11ffb7Safresh1 $lex = "$a1$a2$a3"; 5119f11ffb7Safresh1 is($lex, '123', '$lex = "$a1$a2$a3"'); 5129f11ffb7Safresh1 $lex = "$a1-$a2-$a3"; 5139f11ffb7Safresh1 is($lex, '1-2-3', '$lex = "$a1-$a2-$a3"'); 5149f11ffb7Safresh1 $lex = "-$a1-$a2-$a3"; 5159f11ffb7Safresh1 is($lex, '-1-2-3', '$lex = "-$a1-$a2-$a3"'); 5169f11ffb7Safresh1 $lex = "$a1-$a2-$a3-"; 5179f11ffb7Safresh1 is($lex, '1-2-3-', '$lex = "$a1-$a2-$a3-"'); 5189f11ffb7Safresh1 $lex = "-$a1-$a2-$a3-"; 5199f11ffb7Safresh1 is($lex, '-1-2-3-', '$lex = "-$a1-$a2-$a3-"'); 5209f11ffb7Safresh1 $lex = 'L'; 5219f11ffb7Safresh1 $lex .= "-"; 5229f11ffb7Safresh1 is($lex, 'L-', '$lex .= "-"'); 5239f11ffb7Safresh1 $lex = 'L'; 5249f11ffb7Safresh1 $lex .= "-"; 5259f11ffb7Safresh1 is($lex, 'L-', '$lex .= "-"'); 5269f11ffb7Safresh1 $lex = 'L'; 5279f11ffb7Safresh1 $lex .= "-"; 5289f11ffb7Safresh1 is($lex, 'L-', '$lex .= "-"'); 5299f11ffb7Safresh1 $lex = 'L'; 5309f11ffb7Safresh1 $lex .= "-"; 5319f11ffb7Safresh1 is($lex, 'L-', '$lex .= "-"'); 5329f11ffb7Safresh1 $lex = 'L'; 5339f11ffb7Safresh1 $lex .= $a1; 5349f11ffb7Safresh1 is($lex, 'L1', '$lex .= $a1'); 5359f11ffb7Safresh1 $lex = 'L'; 5369f11ffb7Safresh1 $lex .= "-".$a1; 5379f11ffb7Safresh1 is($lex, 'L-1', '$lex .= "-".$a1'); 5389f11ffb7Safresh1 $lex = 'L'; 5399f11ffb7Safresh1 $lex .= $a1."-"; 5409f11ffb7Safresh1 is($lex, 'L1-', '$lex .= $a1."-"'); 5419f11ffb7Safresh1 $lex = 'L'; 5429f11ffb7Safresh1 $lex .= "-".$a1."-"; 5439f11ffb7Safresh1 is($lex, 'L-1-', '$lex .= "-".$a1."-"'); 5449f11ffb7Safresh1 $lex = 'L'; 5459f11ffb7Safresh1 $lex .= "$a1"; 5469f11ffb7Safresh1 is($lex, 'L1', '$lex .= "$a1"'); 5479f11ffb7Safresh1 $lex = 'L'; 5489f11ffb7Safresh1 $lex .= "-$a1"; 5499f11ffb7Safresh1 is($lex, 'L-1', '$lex .= "-$a1"'); 5509f11ffb7Safresh1 $lex = 'L'; 5519f11ffb7Safresh1 $lex .= "$a1-"; 5529f11ffb7Safresh1 is($lex, 'L1-', '$lex .= "$a1-"'); 5539f11ffb7Safresh1 $lex = 'L'; 5549f11ffb7Safresh1 $lex .= "-$a1-"; 5559f11ffb7Safresh1 is($lex, 'L-1-', '$lex .= "-$a1-"'); 5569f11ffb7Safresh1 $lex = 'L'; 5579f11ffb7Safresh1 $lex .= $a1.$a2; 5589f11ffb7Safresh1 is($lex, 'L12', '$lex .= $a1.$a2'); 5599f11ffb7Safresh1 $lex = 'L'; 5609f11ffb7Safresh1 $lex .= $a1."-".$a2; 5619f11ffb7Safresh1 is($lex, 'L1-2', '$lex .= $a1."-".$a2'); 5629f11ffb7Safresh1 $lex = 'L'; 5639f11ffb7Safresh1 $lex .= "-".$a1."-".$a2; 5649f11ffb7Safresh1 is($lex, 'L-1-2', '$lex .= "-".$a1."-".$a2'); 5659f11ffb7Safresh1 $lex = 'L'; 5669f11ffb7Safresh1 $lex .= $a1."-".$a2."-"; 5679f11ffb7Safresh1 is($lex, 'L1-2-', '$lex .= $a1."-".$a2."-"'); 5689f11ffb7Safresh1 $lex = 'L'; 5699f11ffb7Safresh1 $lex .= "-".$a1."-".$a2."-"; 5709f11ffb7Safresh1 is($lex, 'L-1-2-', '$lex .= "-".$a1."-".$a2."-"'); 5719f11ffb7Safresh1 $lex = 'L'; 5729f11ffb7Safresh1 $lex .= "$a1$a2"; 5739f11ffb7Safresh1 is($lex, 'L12', '$lex .= "$a1$a2"'); 5749f11ffb7Safresh1 $lex = 'L'; 5759f11ffb7Safresh1 $lex .= "$a1-$a2"; 5769f11ffb7Safresh1 is($lex, 'L1-2', '$lex .= "$a1-$a2"'); 5779f11ffb7Safresh1 $lex = 'L'; 5789f11ffb7Safresh1 $lex .= "-$a1-$a2"; 5799f11ffb7Safresh1 is($lex, 'L-1-2', '$lex .= "-$a1-$a2"'); 5809f11ffb7Safresh1 $lex = 'L'; 5819f11ffb7Safresh1 $lex .= "$a1-$a2-"; 5829f11ffb7Safresh1 is($lex, 'L1-2-', '$lex .= "$a1-$a2-"'); 5839f11ffb7Safresh1 $lex = 'L'; 5849f11ffb7Safresh1 $lex .= "-$a1-$a2-"; 5859f11ffb7Safresh1 is($lex, 'L-1-2-', '$lex .= "-$a1-$a2-"'); 5869f11ffb7Safresh1 $lex = 'L'; 5879f11ffb7Safresh1 $lex .= $a1.$a2.$a3; 5889f11ffb7Safresh1 is($lex, 'L123', '$lex .= $a1.$a2.$a3'); 5899f11ffb7Safresh1 $lex = 'L'; 5909f11ffb7Safresh1 $lex .= $a1."-".$a2."-".$a3; 5919f11ffb7Safresh1 is($lex, 'L1-2-3', '$lex .= $a1."-".$a2."-".$a3'); 5929f11ffb7Safresh1 $lex = 'L'; 5939f11ffb7Safresh1 $lex .= "-".$a1."-".$a2."-".$a3; 5949f11ffb7Safresh1 is($lex, 'L-1-2-3', '$lex .= "-".$a1."-".$a2."-".$a3'); 5959f11ffb7Safresh1 $lex = 'L'; 5969f11ffb7Safresh1 $lex .= $a1."-".$a2."-".$a3."-"; 5979f11ffb7Safresh1 is($lex, 'L1-2-3-', '$lex .= $a1."-".$a2."-".$a3."-"'); 5989f11ffb7Safresh1 $lex = 'L'; 5999f11ffb7Safresh1 $lex .= "-".$a1."-".$a2."-".$a3."-"; 6009f11ffb7Safresh1 is($lex, 'L-1-2-3-', '$lex .= "-".$a1."-".$a2."-".$a3."-"'); 6019f11ffb7Safresh1 $lex = 'L'; 6029f11ffb7Safresh1 $lex .= "$a1$a2$a3"; 6039f11ffb7Safresh1 is($lex, 'L123', '$lex .= "$a1$a2$a3"'); 6049f11ffb7Safresh1 $lex = 'L'; 6059f11ffb7Safresh1 $lex .= "$a1-$a2-$a3"; 6069f11ffb7Safresh1 is($lex, 'L1-2-3', '$lex .= "$a1-$a2-$a3"'); 6079f11ffb7Safresh1 $lex = 'L'; 6089f11ffb7Safresh1 $lex .= "-$a1-$a2-$a3"; 6099f11ffb7Safresh1 is($lex, 'L-1-2-3', '$lex .= "-$a1-$a2-$a3"'); 6109f11ffb7Safresh1 $lex = 'L'; 6119f11ffb7Safresh1 $lex .= "$a1-$a2-$a3-"; 6129f11ffb7Safresh1 is($lex, 'L1-2-3-', '$lex .= "$a1-$a2-$a3-"'); 6139f11ffb7Safresh1 $lex = 'L'; 6149f11ffb7Safresh1 $lex .= "-$a1-$a2-$a3-"; 6159f11ffb7Safresh1 is($lex, 'L-1-2-3-', '$lex .= "-$a1-$a2-$a3-"'); 6169f11ffb7Safresh1 { 6179f11ffb7Safresh1 my $l = "-"; 6189f11ffb7Safresh1 is($l, '-', 'my $l = "-"'); 6199f11ffb7Safresh1 } 6209f11ffb7Safresh1 { 6219f11ffb7Safresh1 my $l = "-"; 6229f11ffb7Safresh1 is($l, '-', 'my $l = "-"'); 6239f11ffb7Safresh1 } 6249f11ffb7Safresh1 { 6259f11ffb7Safresh1 my $l = "-"; 6269f11ffb7Safresh1 is($l, '-', 'my $l = "-"'); 6279f11ffb7Safresh1 } 6289f11ffb7Safresh1 { 6299f11ffb7Safresh1 my $l = "-"; 6309f11ffb7Safresh1 is($l, '-', 'my $l = "-"'); 6319f11ffb7Safresh1 } 6329f11ffb7Safresh1 { 6339f11ffb7Safresh1 my $l = $a1; 6349f11ffb7Safresh1 is($l, '1', 'my $l = $a1'); 6359f11ffb7Safresh1 } 6369f11ffb7Safresh1 { 6379f11ffb7Safresh1 my $l = "-".$a1; 6389f11ffb7Safresh1 is($l, '-1', 'my $l = "-".$a1'); 6399f11ffb7Safresh1 } 6409f11ffb7Safresh1 { 6419f11ffb7Safresh1 my $l = $a1."-"; 6429f11ffb7Safresh1 is($l, '1-', 'my $l = $a1."-"'); 6439f11ffb7Safresh1 } 6449f11ffb7Safresh1 { 6459f11ffb7Safresh1 my $l = "-".$a1."-"; 6469f11ffb7Safresh1 is($l, '-1-', 'my $l = "-".$a1."-"'); 6479f11ffb7Safresh1 } 6489f11ffb7Safresh1 { 6499f11ffb7Safresh1 my $l = "$a1"; 6509f11ffb7Safresh1 is($l, '1', 'my $l = "$a1"'); 6519f11ffb7Safresh1 } 6529f11ffb7Safresh1 { 6539f11ffb7Safresh1 my $l = "-$a1"; 6549f11ffb7Safresh1 is($l, '-1', 'my $l = "-$a1"'); 6559f11ffb7Safresh1 } 6569f11ffb7Safresh1 { 6579f11ffb7Safresh1 my $l = "$a1-"; 6589f11ffb7Safresh1 is($l, '1-', 'my $l = "$a1-"'); 6599f11ffb7Safresh1 } 6609f11ffb7Safresh1 { 6619f11ffb7Safresh1 my $l = "-$a1-"; 6629f11ffb7Safresh1 is($l, '-1-', 'my $l = "-$a1-"'); 6639f11ffb7Safresh1 } 6649f11ffb7Safresh1 { 6659f11ffb7Safresh1 my $l = $a1.$a2; 6669f11ffb7Safresh1 is($l, '12', 'my $l = $a1.$a2'); 6679f11ffb7Safresh1 } 6689f11ffb7Safresh1 { 6699f11ffb7Safresh1 my $l = $a1."-".$a2; 6709f11ffb7Safresh1 is($l, '1-2', 'my $l = $a1."-".$a2'); 6719f11ffb7Safresh1 } 6729f11ffb7Safresh1 { 6739f11ffb7Safresh1 my $l = "-".$a1."-".$a2; 6749f11ffb7Safresh1 is($l, '-1-2', 'my $l = "-".$a1."-".$a2'); 6759f11ffb7Safresh1 } 6769f11ffb7Safresh1 { 6779f11ffb7Safresh1 my $l = $a1."-".$a2."-"; 6789f11ffb7Safresh1 is($l, '1-2-', 'my $l = $a1."-".$a2."-"'); 6799f11ffb7Safresh1 } 6809f11ffb7Safresh1 { 6819f11ffb7Safresh1 my $l = "-".$a1."-".$a2."-"; 6829f11ffb7Safresh1 is($l, '-1-2-', 'my $l = "-".$a1."-".$a2."-"'); 6839f11ffb7Safresh1 } 6849f11ffb7Safresh1 { 6859f11ffb7Safresh1 my $l = "$a1$a2"; 6869f11ffb7Safresh1 is($l, '12', 'my $l = "$a1$a2"'); 6879f11ffb7Safresh1 } 6889f11ffb7Safresh1 { 6899f11ffb7Safresh1 my $l = "$a1-$a2"; 6909f11ffb7Safresh1 is($l, '1-2', 'my $l = "$a1-$a2"'); 6919f11ffb7Safresh1 } 6929f11ffb7Safresh1 { 6939f11ffb7Safresh1 my $l = "-$a1-$a2"; 6949f11ffb7Safresh1 is($l, '-1-2', 'my $l = "-$a1-$a2"'); 6959f11ffb7Safresh1 } 6969f11ffb7Safresh1 { 6979f11ffb7Safresh1 my $l = "$a1-$a2-"; 6989f11ffb7Safresh1 is($l, '1-2-', 'my $l = "$a1-$a2-"'); 6999f11ffb7Safresh1 } 7009f11ffb7Safresh1 { 7019f11ffb7Safresh1 my $l = "-$a1-$a2-"; 7029f11ffb7Safresh1 is($l, '-1-2-', 'my $l = "-$a1-$a2-"'); 7039f11ffb7Safresh1 } 7049f11ffb7Safresh1 { 7059f11ffb7Safresh1 my $l = $a1.$a2.$a3; 7069f11ffb7Safresh1 is($l, '123', 'my $l = $a1.$a2.$a3'); 7079f11ffb7Safresh1 } 7089f11ffb7Safresh1 { 7099f11ffb7Safresh1 my $l = $a1."-".$a2."-".$a3; 7109f11ffb7Safresh1 is($l, '1-2-3', 'my $l = $a1."-".$a2."-".$a3'); 7119f11ffb7Safresh1 } 7129f11ffb7Safresh1 { 7139f11ffb7Safresh1 my $l = "-".$a1."-".$a2."-".$a3; 7149f11ffb7Safresh1 is($l, '-1-2-3', 'my $l = "-".$a1."-".$a2."-".$a3'); 7159f11ffb7Safresh1 } 7169f11ffb7Safresh1 { 7179f11ffb7Safresh1 my $l = $a1."-".$a2."-".$a3."-"; 7189f11ffb7Safresh1 is($l, '1-2-3-', 'my $l = $a1."-".$a2."-".$a3."-"'); 7199f11ffb7Safresh1 } 7209f11ffb7Safresh1 { 7219f11ffb7Safresh1 my $l = "-".$a1."-".$a2."-".$a3."-"; 7229f11ffb7Safresh1 is($l, '-1-2-3-', 'my $l = "-".$a1."-".$a2."-".$a3."-"'); 7239f11ffb7Safresh1 } 7249f11ffb7Safresh1 { 7259f11ffb7Safresh1 my $l = "$a1$a2$a3"; 7269f11ffb7Safresh1 is($l, '123', 'my $l = "$a1$a2$a3"'); 7279f11ffb7Safresh1 } 7289f11ffb7Safresh1 { 7299f11ffb7Safresh1 my $l = "$a1-$a2-$a3"; 7309f11ffb7Safresh1 is($l, '1-2-3', 'my $l = "$a1-$a2-$a3"'); 7319f11ffb7Safresh1 } 7329f11ffb7Safresh1 { 7339f11ffb7Safresh1 my $l = "-$a1-$a2-$a3"; 7349f11ffb7Safresh1 is($l, '-1-2-3', 'my $l = "-$a1-$a2-$a3"'); 7359f11ffb7Safresh1 } 7369f11ffb7Safresh1 { 7379f11ffb7Safresh1 my $l = "$a1-$a2-$a3-"; 7389f11ffb7Safresh1 is($l, '1-2-3-', 'my $l = "$a1-$a2-$a3-"'); 7399f11ffb7Safresh1 } 7409f11ffb7Safresh1 { 7419f11ffb7Safresh1 my $l = "-$a1-$a2-$a3-"; 7429f11ffb7Safresh1 is($l, '-1-2-3-', 'my $l = "-$a1-$a2-$a3-"'); 7439f11ffb7Safresh1 } 7449f11ffb7Safresh1} 7459f11ffb7Safresh1 7469f11ffb7Safresh1# multiconcat optimises away scalar assign, and is responsible 7479f11ffb7Safresh1# for handling the assign itself. If the LHS is something weird, 7489f11ffb7Safresh1# make sure it's handled ok 7499f11ffb7Safresh1 7509f11ffb7Safresh1{ 7519f11ffb7Safresh1 my $a = 'a'; 7529f11ffb7Safresh1 my $b = 'b'; 7539f11ffb7Safresh1 my $o = 'o'; 7549f11ffb7Safresh1 7559f11ffb7Safresh1 my $re = qr/abc/; 7569f11ffb7Safresh1 $$re = $a . $b; 7579f11ffb7Safresh1 is($$re, "ab", '$$re = $a . $b'); 7589f11ffb7Safresh1 7599f11ffb7Safresh1 #passing a hash elem to a sub creates a PVLV 7609f11ffb7Safresh1 my $s = sub { $_[0] = $a . $b; }; 7619f11ffb7Safresh1 my %h; 7629f11ffb7Safresh1 $s->($h{foo}); 7639f11ffb7Safresh1 is($h{foo}, "ab", "PVLV"); 7649f11ffb7Safresh1 7659f11ffb7Safresh1 # assigning a string to a typeglob creates an alias 7669f11ffb7Safresh1 $Foo = 'myfoo'; 7679f11ffb7Safresh1 *Bar = ("F" . $o . $o); 7689f11ffb7Safresh1 is($Bar, "myfoo", '*Bar = "Foo"'); 7699f11ffb7Safresh1 7709f11ffb7Safresh1 # while that same typeglob also appearing on the RHS returns 7719f11ffb7Safresh1 # a stringified value 7729f11ffb7Safresh1 7739f11ffb7Safresh1 package QPR { 7749f11ffb7Safresh1 ${'*QPR::Bar*QPR::BarBaz'} = 'myfoobarbaz'; 7759f11ffb7Safresh1 *Bar = (*Bar . *Bar . "Baz"); 7769f11ffb7Safresh1 ::is($Bar, "myfoobarbaz", '*Bar = (*Bar . *Bar . "Baz")'); 7779f11ffb7Safresh1 } 7789f11ffb7Safresh1} 7799f11ffb7Safresh1 7809f11ffb7Safresh1# distinguish between '=' and '.=' where the LHS has the OPf_MOD flag 7819f11ffb7Safresh1 7829f11ffb7Safresh1{ 7839f11ffb7Safresh1 my $foo = "foo"; 7849f11ffb7Safresh1 my $a . $foo; # weird but legal 7859f11ffb7Safresh1 is($a, '', 'my $a . $foo'); 7869f11ffb7Safresh1 my $b; $b .= $foo; 7879f11ffb7Safresh1 is($b, 'foo', 'my $b; $b .= $foo'); 7889f11ffb7Safresh1} 7899f11ffb7Safresh1 7909f11ffb7Safresh1# distinguish between nested appends and concats; the former is 7919f11ffb7Safresh1# affected by the change of value of the target on each concat. 7929f11ffb7Safresh1# This is why multiconcat shouldn't be used in that case 7939f11ffb7Safresh1 7949f11ffb7Safresh1{ 7959f11ffb7Safresh1 my $a = "a"; 7969f11ffb7Safresh1 (($a .= $a) .= $a) .= $a; 7979f11ffb7Safresh1 is($a, "aaaaaaaa", '(($a .= $a) .= $a) .= $a;'); 7989f11ffb7Safresh1} 7999f11ffb7Safresh1 8009f11ffb7Safresh1# check everything works ok near the max arg size of a multiconcat 8019f11ffb7Safresh1 8029f11ffb7Safresh1{ 8039f11ffb7Safresh1 my @a = map "<$_>", 0..99; 8049f11ffb7Safresh1 for my $i (60..68) { # check each side of 64 threshold 8059f11ffb7Safresh1 my $c = join '.', map "\$a[$_]", 0..$i; 8069f11ffb7Safresh1 my $got = eval $c or die $@; 8079f11ffb7Safresh1 my $empty = ''; # don't use a const string in case join'' ever 8089f11ffb7Safresh1 # gets optimised into a multiconcat 8099f11ffb7Safresh1 my $expected = join $empty, @a[0..$i]; 8109f11ffb7Safresh1 is($got, $expected, "long concat chain $i"); 8119f11ffb7Safresh1 } 8129f11ffb7Safresh1} 8139f11ffb7Safresh1 8149f11ffb7Safresh1# RT #132646 8159f11ffb7Safresh1# with adjacent consts, the second const is treated as an arg rather than a 8169f11ffb7Safresh1# consts. Make sure this doesn't exceeed the maximum allowed number of 8179f11ffb7Safresh1# args 8189f11ffb7Safresh1{ 8199f11ffb7Safresh1 my $x = 'X'; 8209f11ffb7Safresh1 my $got = 8219f11ffb7Safresh1 'A' . $x . 'B' . 'C' . $x . 'D' 8229f11ffb7Safresh1 . 'A' . $x . 'B' . 'C' . $x . 'D' 8239f11ffb7Safresh1 . 'A' . $x . 'B' . 'C' . $x . 'D' 8249f11ffb7Safresh1 . 'A' . $x . 'B' . 'C' . $x . 'D' 8259f11ffb7Safresh1 . 'A' . $x . 'B' . 'C' . $x . 'D' 8269f11ffb7Safresh1 . 'A' . $x . 'B' . 'C' . $x . 'D' 8279f11ffb7Safresh1 . 'A' . $x . 'B' . 'C' . $x . 'D' 8289f11ffb7Safresh1 . 'A' . $x . 'B' . 'C' . $x . 'D' 8299f11ffb7Safresh1 . 'A' . $x . 'B' . 'C' . $x . 'D' 8309f11ffb7Safresh1 . 'A' . $x . 'B' . 'C' . $x . 'D' 8319f11ffb7Safresh1 . 'A' . $x . 'B' . 'C' . $x . 'D' 8329f11ffb7Safresh1 . 'A' . $x . 'B' . 'C' . $x . 'D' 8339f11ffb7Safresh1 . 'A' . $x . 'B' . 'C' . $x . 'D' 8349f11ffb7Safresh1 . 'A' . $x . 'B' . 'C' . $x . 'D' 8359f11ffb7Safresh1 . 'A' . $x . 'B' . 'C' . $x . 'D' 8369f11ffb7Safresh1 . 'A' . $x . 'B' . 'C' . $x . 'D' 8379f11ffb7Safresh1 . 'A' . $x . 'B' . 'C' . $x . 'D' 8389f11ffb7Safresh1 ; 8399f11ffb7Safresh1 is ($got, 8409f11ffb7Safresh1 "AXBCXDAXBCXDAXBCXDAXBCXDAXBCXDAXBCXDAXBCXDAXBCXDAXBCXDAXBCXDAXBCXDAXBCXDAXBCXDAXBCXDAXBCXDAXBCXDAXBCXD", 8419f11ffb7Safresh1 "RT #132646"); 8429f11ffb7Safresh1} 8439f11ffb7Safresh1 8449f11ffb7Safresh1# RT #132595 8459f11ffb7Safresh1# multiconcat shouldn't affect the order of arg evaluation 8469f11ffb7Safresh1package RT132595 { 8479f11ffb7Safresh1 my $a = "a"; 8489f11ffb7Safresh1 my $i = 0; 8499f11ffb7Safresh1 sub TIESCALAR { bless({}, $_[0]) } 8509f11ffb7Safresh1 sub FETCH { ++$i; $a = "b".$i; "c".$i } 8519f11ffb7Safresh1 my $t; 8529f11ffb7Safresh1 tie $t, "RT132595"; 8539f11ffb7Safresh1 my $res = $a.$t.$a.$t; 8549f11ffb7Safresh1 ::is($res, "b1c1b1c2", "RT #132595"); 8559f11ffb7Safresh1} 856*b46d8ef2Safresh1 857*b46d8ef2Safresh1# RT #133441 858*b46d8ef2Safresh1# multiconcat wasn't seeing a mutator as a mutator 859*b46d8ef2Safresh1{ 860*b46d8ef2Safresh1 my ($a, $b) = qw(a b); 861*b46d8ef2Safresh1 ($a = 'A'.$b) .= 'c'; 862*b46d8ef2Safresh1 is($a, "Abc", "RT #133441"); 863*b46d8ef2Safresh1} 864