Integrate mainline
[p5sagit/p5-mst-13.2.git] / t / run / fresh_perl.t
1 #!./perl
2
3 # ** DO NOT ADD ANY MORE TESTS HERE **
4 # Instead, put the test in the appropriate test file and use the 
5 # fresh_perl_is()/fresh_perl_like() functions in t/test.pl.
6
7 # This is for tests that used to abnormally cause segfaults, and other nasty
8 # errors that might kill the interpreter and for some reason you can't
9 # use an eval().
10
11 BEGIN {
12     chdir 't' if -d 't';
13     @INC = '../lib';
14     require './test.pl';        # for which_perl() etc
15 }
16
17 use strict;
18
19 my $Perl = which_perl();
20
21 $|=1;
22
23 my @prgs = ();
24 while(<DATA>) { 
25     if(m/^#{8,}\s*(.*)/) { 
26         push @prgs, ['', $1];
27     }
28     else { 
29         $prgs[-1][0] .= $_;
30     }
31 }
32 plan tests => scalar @prgs;
33
34 foreach my $prog (@prgs) {
35     my($raw_prog, $name) = @$prog;
36
37     my $switch;
38     if ($raw_prog =~ s/^\s*(-\w.*)//){
39         $switch = $1;
40     }
41
42     my($prog,$expected) = split(/\nEXPECT\n/, $raw_prog);
43
44     if ($prog =~ /^\# SKIP: (.+)/m) {
45         if (eval $1) {
46             ok(1, "Skip: $1");
47             next;
48         }
49     }
50
51     $expected =~ s/\n+$//;
52
53     fresh_perl_is($prog, $expected, { switches => [$switch] }, $name);
54 }
55
56 __END__
57 ########
58 $a = ":="; split /($a)/o, "a:=b:=c"; print "@_"
59 EXPECT
60 a := b := c
61 ########
62 $cusp = ~0 ^ (~0 >> 1);
63 use integer;
64 $, = " ";
65 print +($cusp - 1) % 8, $cusp % 8, -$cusp % 8, 8 | (($cusp + 1) % 8 + 7), "!\n";
66 EXPECT
67 7 0 0 8 !
68 ########
69 $foo=undef; $foo->go;
70 EXPECT
71 Can't call method "go" on an undefined value at - line 1.
72 ########
73 BEGIN
74         {
75             "foo";
76         }
77 ########
78 $array[128]=1
79 ########
80 $x=0x0eabcd; print $x->ref;
81 EXPECT
82 Can't call method "ref" without a package or object reference at - line 1.
83 ########
84 chop ($str .= <DATA>);
85 ########
86 close ($banana);
87 ########
88 $x=2;$y=3;$x<$y ? $x : $y += 23;print $x;
89 EXPECT
90 25
91 ########
92 eval 'sub bar {print "In bar"}';
93 ########
94 system './perl -ne "print if eof" /dev/null' unless $^O eq 'MacOS'
95 ########
96 chop($file = <DATA>);
97 ########
98 package N;
99 sub new {my ($obj,$n)=@_; bless \$n}  
100 $aa=new N 1;
101 $aa=12345;
102 print $aa;
103 EXPECT
104 12345
105 ########
106 $_="foo";
107 printf(STDOUT "%s\n", $_);
108 EXPECT
109 foo
110 ########
111 push(@a, 1, 2, 3,)
112 ########
113 quotemeta ""
114 ########
115 for ("ABCDE") {
116  &sub;
117 s/./&sub($&)/eg;
118 print;}
119 sub sub {local($_) = @_;
120 $_ x 4;}
121 EXPECT
122 Modification of a read-only value attempted at - line 3.
123 ########
124 package FOO;sub new {bless {FOO => BAR}};
125 package main;
126 use strict vars;   
127 my $self = new FOO;
128 print $$self{FOO};
129 EXPECT
130 BAR
131 ########
132 $_="foo";
133 s/.{1}//s;
134 print;
135 EXPECT
136 oo
137 ########
138 print scalar ("foo","bar")
139 EXPECT
140 bar
141 ########
142 sub by_number { $a <=> $b; };# inline function for sort below
143 $as_ary{0}="a0";
144 @ordered_array=sort by_number keys(%as_ary);
145 ########
146 sub NewShell
147 {
148   local($Host) = @_;
149   my($m2) = $#Shells++;
150   $Shells[$m2]{HOST} = $Host;
151   return $m2;
152 }
153  
154 sub ShowShell
155 {
156   local($i) = @_;
157 }
158  
159 &ShowShell(&NewShell(beach,Work,"+0+0"));
160 &ShowShell(&NewShell(beach,Work,"+0+0"));
161 &ShowShell(&NewShell(beach,Work,"+0+0"));
162 ########
163    {
164        package FAKEARRAY;
165    
166        sub TIEARRAY
167        { print "TIEARRAY @_\n"; 
168          die "bomb out\n" unless $count ++ ;
169          bless ['foo'] 
170        }
171        sub FETCH { print "fetch @_\n"; $_[0]->[$_[1]] }
172        sub STORE { print "store @_\n"; $_[0]->[$_[1]] = $_[2] }
173        sub DESTROY { print "DESTROY \n"; undef @{$_[0]}; }
174    }
175    
176 eval 'tie @h, FAKEARRAY, fred' ;
177 tie @h, FAKEARRAY, fred ;
178 EXPECT
179 TIEARRAY FAKEARRAY fred
180 TIEARRAY FAKEARRAY fred
181 DESTROY 
182 ########
183 BEGIN { die "phooey\n" }
184 EXPECT
185 phooey
186 BEGIN failed--compilation aborted at - line 1.
187 ########
188 BEGIN { 1/$zero }
189 EXPECT
190 Illegal division by zero at - line 1.
191 BEGIN failed--compilation aborted at - line 1.
192 ########
193 BEGIN { undef = 0 }
194 EXPECT
195 Modification of a read-only value attempted at - line 1.
196 BEGIN failed--compilation aborted at - line 1.
197 ########
198 {
199     package foo;
200     sub PRINT {
201         shift;
202         print join(' ', reverse @_)."\n";
203     }
204     sub PRINTF {
205         shift;
206           my $fmt = shift;
207         print sprintf($fmt, @_)."\n";
208     }
209     sub TIEHANDLE {
210         bless {}, shift;
211     }
212     sub READLINE {
213         "Out of inspiration";
214     }
215     sub DESTROY {
216         print "and destroyed as well\n";
217   }
218   sub READ {
219       shift;
220       print STDOUT "foo->can(READ)(@_)\n";
221       return 100; 
222   }
223   sub GETC {
224       shift;
225       print STDOUT "Don't GETC, Get Perl\n";
226       return "a"; 
227   }    
228 }
229 {
230     local(*FOO);
231     tie(*FOO,'foo');
232     print FOO "sentence.", "reversed", "a", "is", "This";
233     print "-- ", <FOO>, " --\n";
234     my($buf,$len,$offset);
235     $buf = "string";
236     $len = 10; $offset = 1;
237     read(FOO, $buf, $len, $offset) == 100 or die "foo->READ failed";
238     getc(FOO) eq "a" or die "foo->GETC failed";
239     printf "%s is number %d\n", "Perl", 1;
240 }
241 EXPECT
242 This is a reversed sentence.
243 -- Out of inspiration --
244 foo->can(READ)(string 10 1)
245 Don't GETC, Get Perl
246 Perl is number 1
247 and destroyed as well
248 ########
249 my @a; $a[2] = 1; for (@a) { $_ = 2 } print "@a\n"
250 EXPECT
251 2 2 2
252 ########
253 # used to attach defelem magic to all immortal values,
254 # which made restore of local $_ fail.
255 foo(2>1);
256 sub foo { bar() for @_;  }
257 sub bar { local $_; }
258 print "ok\n";
259 EXPECT
260 ok
261 ########
262 @a = ($a, $b, $c, $d) = (5, 6);
263 print "ok\n"
264   if ($a[0] == 5 and $a[1] == 6 and !defined $a[2] and !defined $a[3]);
265 EXPECT
266 ok
267 ########
268 print "ok\n" if (1E2<<1 == 200 and 3E4<<3 == 240000);
269 EXPECT
270 ok
271 ########
272 print "ok\n" if ("\0" lt "\xFF");
273 EXPECT
274 ok
275 ########
276 open(H,$^O eq 'MacOS' ? ':run:fresh_perl.t' : 'run/fresh_perl.t'); # must be in the 't' directory
277 stat(H);
278 print "ok\n" if (-e _ and -f _ and -r _);
279 EXPECT
280 ok
281 ########
282 sub thing { 0 || return qw(now is the time) }
283 print thing(), "\n";
284 EXPECT
285 nowisthetime
286 ########
287 $ren = 'joy';
288 $stimpy = 'happy';
289 { local $main::{ren} = *stimpy; print $ren, ' ' }
290 print $ren, "\n";
291 EXPECT
292 happy joy
293 ########
294 $stimpy = 'happy';
295 { local $main::{ren} = *stimpy; print ${'ren'}, ' ' }
296 print +(defined(${'ren'}) ? 'oops' : 'joy'), "\n";
297 EXPECT
298 happy joy
299 ########
300 package p;
301 sub func { print 'really ' unless wantarray; 'p' }
302 sub groovy { 'groovy' }
303 package main;
304 print p::func()->groovy(), "\n"
305 EXPECT
306 really groovy
307 ########
308 @list = ([ 'one', 1 ], [ 'two', 2 ]);
309 sub func { $num = shift; (grep $_->[1] == $num, @list)[0] }
310 print scalar(map &func($_), 1 .. 3), " ",
311       scalar(map scalar &func($_), 1 .. 3), "\n";
312 EXPECT
313 2 3
314 ########
315 ($k, $s)  = qw(x 0);
316 @{$h{$k}} = qw(1 2 4);
317 for (@{$h{$k}}) { $s += $_; delete $h{$k} if ($_ == 2) }
318 print "bogus\n" unless $s == 7;
319 ########
320 my $a = 'outer';
321 eval q[ my $a = 'inner'; eval q[ print "$a " ] ];
322 eval { my $x = 'peace'; eval q[ print "$x\n" ] }
323 EXPECT
324 inner peace
325 ########
326 -w
327 $| = 1;
328 sub foo {
329     print "In foo1\n";
330     eval 'sub foo { print "In foo2\n" }';
331     print "Exiting foo1\n";
332 }
333 foo;
334 foo;
335 EXPECT
336 In foo1
337 Subroutine foo redefined at (eval 1) line 1.
338 Exiting foo1
339 In foo2
340 ########
341 $s = 0;
342 map {#this newline here tickles the bug
343 $s += $_} (1,2,4);
344 print "eat flaming death\n" unless ($s == 7);
345 ########
346 sub foo { local $_ = shift; split; @_ }
347 @x = foo(' x  y  z ');
348 print "you die joe!\n" unless "@x" eq 'x y z';
349 ########
350 /(?{"{"})/      # Check it outside of eval too
351 EXPECT
352 Sequence (?{...}) not terminated or not {}-balanced at - line 1, within pattern
353 Sequence (?{...}) not terminated or not {}-balanced in regex; marked by <-- HERE in m/(?{ <-- HERE "{"})/ at - line 1.
354 ########
355 /(?{"{"}})/     # Check it outside of eval too
356 EXPECT
357 Unmatched right curly bracket at (re_eval 1) line 1, at end of line
358 syntax error at (re_eval 1) line 1, near ""{"}"
359 Compilation failed in regexp at - line 1.
360 ########
361 BEGIN { @ARGV = qw(a b c d e) }
362 BEGIN { print "argv <@ARGV>\nbegin <",shift,">\n" }
363 END { print "end <",shift,">\nargv <@ARGV>\n" }
364 INIT { print "init <",shift,">\n" }
365 CHECK { print "check <",shift,">\n" }
366 EXPECT
367 argv <a b c d e>
368 begin <a>
369 check <b>
370 init <c>
371 end <d>
372 argv <e>
373 ########
374 -l
375 # fdopen from a system descriptor to a system descriptor used to close
376 # the former.
377 open STDERR, '>&=STDOUT' or die $!;
378 select STDOUT; $| = 1; print fileno STDOUT or die $!;
379 select STDERR; $| = 1; print fileno STDERR or die $!;
380 EXPECT
381 1
382 2
383 ########
384 -w
385 sub testme { my $a = "test"; { local $a = "new test"; print $a }}
386 EXPECT
387 Can't localize lexical variable $a at - line 2.
388 ########
389 package X;
390 sub ascalar { my $r; bless \$r }
391 sub DESTROY { print "destroyed\n" };
392 package main;
393 *s = ascalar X;
394 EXPECT
395 destroyed
396 ########
397 package X;
398 sub anarray { bless [] }
399 sub DESTROY { print "destroyed\n" };
400 package main;
401 *a = anarray X;
402 EXPECT
403 destroyed
404 ########
405 package X;
406 sub ahash { bless {} }
407 sub DESTROY { print "destroyed\n" };
408 package main;
409 *h = ahash X;
410 EXPECT
411 destroyed
412 ########
413 package X;
414 sub aclosure { my $x; bless sub { ++$x } }
415 sub DESTROY { print "destroyed\n" };
416 package main;
417 *c = aclosure X;
418 EXPECT
419 destroyed
420 ########
421 package X;
422 sub any { bless {} }
423 my $f = "FH000"; # just to thwart any future optimisations
424 sub afh { select select ++$f; my $r = *{$f}{IO}; delete $X::{$f}; bless $r }
425 sub DESTROY { print "destroyed\n" }
426 package main;
427 $x = any X; # to bump sv_objcount. IO objs aren't counted??
428 *f = afh X;
429 EXPECT
430 destroyed
431 destroyed
432 ########
433 BEGIN {
434   $| = 1;
435   $SIG{__WARN__} = sub {
436     eval { print $_[0] };
437     die "bar\n";
438   };
439   warn "foo\n";
440 }
441 EXPECT
442 foo
443 bar
444 BEGIN failed--compilation aborted at - line 8.
445 ########
446 package X;
447 @ISA='Y';
448 sub new {
449     my $class = shift;
450     my $self = { };
451     bless $self, $class;
452     my $init = shift;
453     $self->foo($init);
454     print "new", $init;
455     return $self;
456 }
457 sub DESTROY {
458     my $self = shift;
459     print "DESTROY", $self->foo;
460 }
461 package Y;
462 sub attribute {
463     my $self = shift;
464     my $var = shift;
465     if (@_ == 0) {
466         return $self->{$var};
467     } elsif (@_ == 1) {
468         $self->{$var} = shift;
469     }
470 }
471 sub AUTOLOAD {
472     $AUTOLOAD =~ /::([^:]+)$/;
473     my $method = $1;
474     splice @_, 1, 0, $method;
475     goto &attribute;
476 }
477 package main;
478 my $x = X->new(1);
479 for (2..3) {
480     my $y = X->new($_);
481     print $y->foo;
482 }
483 print $x->foo;
484 EXPECT
485 new1new22DESTROY2new33DESTROY31DESTROY1
486 ########
487 re();
488 sub re {
489     my $re = join '', eval 'qr/(??{ $obj->method })/';
490     $re;
491 }
492 EXPECT
493 ########
494 use strict;
495 my $foo = "ZZZ\n";
496 END { print $foo }
497 EXPECT
498 ZZZ
499 ########
500 eval '
501 use strict;
502 my $foo = "ZZZ\n";
503 END { print $foo }
504 ';
505 EXPECT
506 ZZZ
507 ########
508 -w
509 if (@ARGV) { print "" }
510 else {
511   if ($x == 0) { print "" } else { print $x }
512 }
513 EXPECT
514 Use of uninitialized value in numeric eq (==) at - line 4.
515 ########
516 $x = sub {};
517 foo();
518 sub foo { eval { return }; }
519 print "ok\n";
520 EXPECT
521 ok
522 ########
523 # moved to op/lc.t
524 EXPECT
525 ########
526 sub f { my $a = 1; my $b = 2; my $c = 3; my $d = 4; next }
527 my $x = "foo";
528 { f } continue { print $x, "\n" }
529 EXPECT
530 foo
531 ########
532 sub C () { 1 }
533 sub M { $_[0] = 2; }
534 eval "C";
535 M(C);
536 EXPECT
537 Modification of a read-only value attempted at - line 2.
538 ########
539 print qw(ab a\b a\\b);
540 EXPECT
541 aba\ba\b
542 ########
543 # lexicals declared after the myeval() definition should not be visible
544 # within it
545 sub myeval { eval $_[0] }
546 my $foo = "ok 2\n";
547 myeval('sub foo { local $foo = "ok 1\n"; print $foo; }');
548 die $@ if $@;
549 foo();
550 print $foo;
551 EXPECT
552 ok 1
553 ok 2
554 ########
555 # lexicals outside an eval"" should be visible inside subroutine definitions
556 # within it
557 eval <<'EOT'; die $@ if $@;
558 {
559     my $X = "ok\n";
560     eval 'sub Y { print $X }'; die $@ if $@;
561     Y();
562 }
563 EOT
564 EXPECT
565 ok
566 ########
567 # This test is here instead of lib/locale.t because
568 # the bug depends on in the internal state of the locale
569 # settings and pragma/locale messes up that state pretty badly.
570 # We need a "fresh run".
571 BEGIN {
572     eval { require POSIX };
573     if ($@) {
574         exit(0); # running minitest?
575     }
576 }
577 use Config;
578 my $have_setlocale = $Config{d_setlocale} eq 'define';
579 $have_setlocale = 0 if $@;
580 # Visual C's CRT goes silly on strings of the form "en_US.ISO8859-1"
581 # and mingw32 uses said silly CRT
582 $have_setlocale = 0 if (($^O eq 'MSWin32' || $^O eq 'NetWare') && $Config{cc} =~ /^(cl|gcc)/i);
583 exit(0) unless $have_setlocale;
584 my @locales;
585 if (-x "/usr/bin/locale" && open(LOCALES, "/usr/bin/locale -a 2>/dev/null|")) {
586     while(<LOCALES>) {
587         chomp;
588         push(@locales, $_);
589     }
590     close(LOCALES);
591 }
592 exit(0) unless @locales;
593 for (@locales) {
594     use POSIX qw(locale_h);
595     use locale;
596     setlocale(LC_NUMERIC, $_) or next;
597     my $s = sprintf "%g %g", 3.1, 3.1;
598     next if $s eq '3.1 3.1' || $s =~ /^(3.+1) \1$/;
599     print "$_ $s\n";
600 }
601 EXPECT
602 ########
603 # [ID 20001202.002] and change #8066 added 'at -e line 1';
604 # reversed again as a result of [perl #17763]
605 die qr(x)
606 EXPECT
607 (?-xism:x)
608 ########
609 # 20001210.003 mjd@plover.com
610 format REMITOUT_TOP =
611 FOO
612 .
613
614 format REMITOUT =
615 BAR
616 .
617
618 # This loop causes a segv in 5.6.0
619 for $lineno (1..61) {
620    write REMITOUT;
621 }
622
623 print "It's OK!";
624 EXPECT
625 It's OK!
626 ########
627 # Inaba Hiroto
628 reset;
629 if (0) {
630   if ("" =~ //) {
631   }
632 }
633 ########
634 # Nicholas Clark
635 $ENV{TERM} = 0;
636 reset;
637 // if 0;
638 ########
639 # Vadim Konovalov
640 use strict;
641 sub new_pmop($) {
642     my $pm = shift;
643     return eval "sub {shift=~/$pm/}";
644 }
645 new_pmop "abcdef"; reset;
646 new_pmop "abcdef"; reset;
647 new_pmop "abcdef"; reset;
648 new_pmop "abcdef"; reset;
649 ########
650 # David Dyck
651 # coredump in 5.7.1
652 close STDERR; die;
653 EXPECT
654 ########
655 -w
656 "x" =~ /(\G?x)?/;       # core dump in 20000716.007
657 ########
658 # Bug 20010515.004
659 my @h = 1 .. 10;
660 bad(@h);
661 sub bad {
662    undef @h;
663    print "O";
664    print for @_;
665    print "K";
666 }
667 EXPECT
668 OK
669 ########
670 # Bug 20010506.041
671 "abcd\x{1234}" =~ /(a)(b[c])(d+)?/i and print "ok\n";
672 EXPECT
673 ok
674 ########
675 my $foo = Bar->new();
676 my @dst;
677 END {
678     ($_ = "@dst") =~ s/\(0x.+?\)/(0x...)/;
679     print $_, "\n";
680 }
681 package Bar;
682 sub new {
683     my Bar $self = bless [], Bar;
684     eval '$self';
685     return $self;
686 }
687 sub DESTROY { 
688     push @dst, "$_[0]";
689 }
690 EXPECT
691 Bar=ARRAY(0x...)
692 ######## (?{...}) compilation bounces on PL_rs
693 -0
694 {
695   /(?{ $x })/;
696   # {
697 }
698 BEGIN { print "ok\n" }
699 EXPECT
700 ok
701 ######## scalar ref to file test operator segfaults on 5.6.1 [ID 20011127.155]
702 # This only happens if the filename is 11 characters or less.
703 $foo = \-f "blah";
704 print "ok" if ref $foo && !$$foo;
705 EXPECT
706 ok
707 ######## [ID 20011128.159] 'X' =~ /\X/ segfault in 5.6.1
708 print "ok" if 'X' =~ /\X/;
709 EXPECT
710 ok
711 ######## segfault in 5.6.1 within peep()
712 @a = (1..9);
713 @b = sort { @c = sort { @d = sort { 0 } @a; @d; } @a; } @a;
714 print join '', @a, "\n";
715 EXPECT
716 123456789
717 ######## [ID 20020104.007] "coredump on dbmclose"
718 package Foo;
719 eval { require AnyDBM_File }; # not all places have dbm* functions
720 if ($@) {
721     print "ok\n";
722     exit 0;
723 }
724 package Foo;
725 sub new {
726         my $proto = shift;
727         my $class = ref($proto) || $proto;
728         my $self  = {};
729         bless($self,$class);
730         my %LT;
731         dbmopen(%LT, "dbmtest", 0666) ||
732             die "Can't open dbmtest because of $!\n";
733         $self->{'LT'} = \%LT;
734         return $self;
735 }
736 sub DESTROY {
737         my $self = shift;
738         dbmclose(%{$self->{'LT'}});
739         1 while unlink 'dbmtest';
740         1 while unlink <dbmtest.*>;
741         print "ok\n";
742 }
743 package main;
744 $test = Foo->new(); # must be package var
745 EXPECT
746 ok
747 ######## example from Camel 5, ch. 15, pp.406 (with my)
748 # SKIP: ord "A" == 193 # EBCDIC
749 use strict;
750 use utf8;
751 my $人 = 2; # 0xe4 0xba 0xba: U+4eba, "human" in CJK ideograph
752 $人++; # a child is born
753 print $人, "\n";
754 EXPECT
755 3
756 ######## example from Camel 5, ch. 15, pp.406 (with our)
757 # SKIP: ord "A" == 193 # EBCDIC
758 use strict;
759 use utf8;
760 our $人 = 2; # 0xe4 0xba 0xba: U+4eba, "human" in CJK ideograph
761 $人++; # a child is born
762 print $人, "\n";
763 EXPECT
764 3
765 ######## example from Camel 5, ch. 15, pp.406 (with package vars)
766 # SKIP: ord "A" == 193 # EBCDIC
767 use utf8;
768 $人 = 2; # 0xe4 0xba 0xba: U+4eba, "human" in CJK ideograph
769 $人++; # a child is born
770 print $人, "\n";
771 EXPECT
772 3
773 ######## example from Camel 5, ch. 15, pp.406 (with use vars)
774 # SKIP: ord "A" == 193 # EBCDIC
775 use strict;
776 use utf8;
777 use vars qw($人);
778 $人 = 2; # 0xe4 0xba 0xba: U+4eba, "human" in CJK ideograph
779 $人++; # a child is born
780 print $人, "\n";
781 EXPECT
782 3
783 ########
784 # test that closures generated by eval"" hold on to the CV of the eval""
785 # for their entire lifetime
786 $code = eval q[
787   sub { eval '$x = "ok 1\n"'; }
788 ];
789 &{$code}();
790 print $x;
791 EXPECT
792 ok 1
793 ######## [ID 20020623.009] nested eval/sub segfaults
794 $eval = eval 'sub { eval "sub { %S }" }';
795 $eval->({});
796 ######## [perl #17951] Strange UTF error
797 -W
798 # From: "John Kodis" <kodis@mail630.gsfc.nasa.gov>
799 # Newsgroups: comp.lang.perl.moderated
800 # Subject: Strange UTF error
801 # Date: Fri, 11 Oct 2002 16:19:58 -0400
802 # Message-ID: <pan.2002.10.11.20.19.48.407190@mail630.gsfc.nasa.gov>
803 $_ = "foobar\n";
804 utf8::upgrade($_); # the original code used a UTF-8 locale (affects STDIN)
805 # matching is actually irrelevant: avoiding several dozen of these
806 # Illegal hexadecimal digit '   ' ignored at /usr/lib/perl5/5.8.0/utf8_heavy.pl line 152
807 # is what matters.
808 /^([[:digit:]]+)/;
809 EXPECT
810 ######## [perl #20667] unicode regex vs non-unicode regex
811 $toto = 'Hello';
812 $toto =~ /\w/; # this line provokes the problem!
813 $name = 'A B';
814 # utf8::upgrade($name) if @ARGV;
815 if ($name =~ /(\p{IsUpper}) (\p{IsUpper})/){
816     print "It's good! >$1< >$2<\n";
817 } else {
818     print "It's not good...\n";
819 }
820 EXPECT
821 It's good! >A< >B<
822 ######## [perl #8760] strangness with utf8 and warn
823 $_="foo";utf8::upgrade($_);/bar/i,warn$_;
824 EXPECT
825 foo at - line 1.
826
827