make return values from match in a list context, as well as $& et
[p5sagit/p5-mst-13.2.git] / t / pragma / utf8.t
index 5e467ae..0e55a67 100755 (executable)
@@ -4,9 +4,13 @@ BEGIN {
     chdir 't' if -d 't';
     unshift @INC, '../lib';
     $ENV{PERL5LIB} = '../lib';
+    if ( ord("\t") != 9 ) { # skip on ebcdic platforms
+        print "1..0 # Skip utf8 tests on ebcdic platform.\n";
+        exit;
+    }
 }
 
-print "1..9\n";
+print "1..60\n";
 
 my $test = 1;
 
@@ -65,6 +69,185 @@ sub ok {
     ok $1, 'NUMERIC';
     $test++;
 
+    $_ = "alpha123numeric456"; 
+    m/([\p{IsDigit}]+)/; 
+    ok $1, '123';
+    $test++;
+
+    $_ = "alpha123numeric456"; 
+    m/([^\p{IsDigit}]+)/; 
+    ok $1, 'alpha';
+    $test++;
+
+    $_ = ",123alpha,456numeric"; 
+    m/([\p{IsAlnum}]+)/; 
+    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++;
+
+    }
+}