This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
make return values from match in a list context, as well as $& et
[perl5.git] / t / pragma / utf8.t
index 2ae8d9c..0e55a67 100755 (executable)
@@ -10,7 +10,7 @@ BEGIN {
     }
 }
 
-print "1..12\n";
+print "1..60\n";
 
 my $test = 1;
 
@@ -84,3 +84,170 @@ sub ok {
     ok $1, '123alpha';
     $test++;
 }
+{
+    use utf8;
+
+    $_ = "\x{263A}>\x{263A}\x{263A}"; 
+
+    ok length, 4;
+    $test++;
+
+    ok length((m/>(.)/)[0]), 1;
+    $test++;
+
+    ok length($&), 2;
+    $test++;
+
+    ok length($'), 1;
+    $test++;
+
+    ok length($`), 1;
+    $test++;
+
+    ok length($1), 1;
+    $test++;
+
+    ok length($tmp=$&), 2;
+    $test++;
+
+    ok length($tmp=$'), 1;
+    $test++;
+
+    ok length($tmp=$`), 1;
+    $test++;
+
+    ok length($tmp=$1), 1;
+    $test++;
+
+    ok $&, pack("C*", ord(">"), 0342, 0230, 0272);
+    $test++;
+
+    ok $', pack("C*", 0342, 0230, 0272);
+    $test++;
+
+    ok $`, pack("C*", 0342, 0230, 0272);
+    $test++;
+
+    ok $1, pack("C*", 0342, 0230, 0272);
+    $test++;
+
+    {
+       use bytes;
+       no utf8;
+
+       ok length, 10;
+       $test++;
+
+       ok length((m/>(.)/)[0]), 1;
+       $test++;
+
+       ok length($&), 2;
+       $test++;
+
+       ok length($'), 5;
+       $test++;
+
+       ok length($`), 3;
+       $test++;
+
+       ok length($1), 1;
+       $test++;
+
+       ok $&, pack("C*", ord(">"), 0342);
+       $test++;
+
+       ok $', pack("C*", 0230, 0272, 0342, 0230, 0272);
+       $test++;
+
+       ok $`, pack("C*", 0342, 0230, 0272);
+       $test++;
+
+       ok $1, pack("C*", 0342);
+       $test++;
+
+    }
+
+
+    {
+       no utf8;
+       $_="\342\230\272>\342\230\272\342\230\272";
+    }
+
+    ok length, 10;
+    $test++;
+
+    ok length((m/>(.)/)[0]), 1;
+    $test++;
+
+    ok length($&), 2;
+    $test++;
+
+    ok length($'), 1;
+    $test++;
+
+    ok length($`), 1;
+    $test++;
+
+    ok length($1), 1;
+    $test++;
+
+    ok length($tmp=$&), 2;
+    $test++;
+
+    ok length($tmp=$'), 1;
+    $test++;
+
+    ok length($tmp=$`), 1;
+    $test++;
+
+    ok length($tmp=$1), 1;
+    $test++;
+
+    ok $&, pack("C*", ord(">"), 0342, 0230, 0272);
+    $test++;
+
+    ok $', pack("C*", 0342, 0230, 0272);
+    $test++;
+
+    ok $`, pack("C*", 0342, 0230, 0272);
+    $test++;
+
+    ok $1, pack("C*", 0342, 0230, 0272);
+    $test++;
+
+    {
+       use bytes;
+       no utf8;
+
+       ok length, 10;
+       $test++;
+
+       ok length((m/>(.)/)[0]), 1;
+       $test++;
+
+       ok length($&), 2;
+       $test++;
+
+       ok length($'), 5;
+       $test++;
+
+       ok length($`), 3;
+       $test++;
+
+       ok length($1), 1;
+       $test++;
+
+       ok $&, pack("C*", ord(">"), 0342);
+       $test++;
+
+       ok $', pack("C*", 0230, 0272, 0342, 0230, 0272);
+       $test++;
+
+       ok $`, pack("C*", 0342, 0230, 0272);
+       $test++;
+
+       ok $1, pack("C*", 0342);
+       $test++;
+
+    }
+}