when run lsb perl test on both x86 and ppc, it will fail at op/opt.t, and the information: FAILED tests 940-4009 Failed 3070/4009 tests, 23.42% okay when go to the test directory /opt/lsb/test/perl and then run: # ./single_test op/pat.t error messages are as follow: ok 936 - postponed utf8 string in utf8 re doesn't match non-utf8 ok 937 - postponed utf8 string in non-utf8 re doesn't match non-utf8 # more user-defined character properties ok 938 - \x{0712}, \p{IsSyriac1} Line 2991 ok 939 - \x{072F}, \P{IsSyriac1} Line 2992 dubious Test returned status 255 (wstat 65280, 0xff00) DIED. FAILED tests 940-4009 Failed 3070/4009 tests, 23.42% okay Failed Test Stat Wstat Total Fail List of Failed ------------------------------------------------------------------------------- op/pat.t 255 65280 4009 6140 940-4009 Failed 1/1 test scripts. 3070/4009 subtests failed. Files=1, Tests=4009, 34 wallclock secs ( 9.16 cusr + 1.57 csys = 10.73 CPU) Failed 1/1 test programs. 3070/4009 subtests failed.
Jingdong help to find the root cause
Run the following scripts which cause perl test failed. #!./perl require './test.pl'; sub Syriac1 { return <<'END'; 0712 072C 0730 074A END } ok("\x{0712}" =~ /\p{Syriac1}/, '\x{0712}, \p{Syriac1}'); ok("\x{072F}" =~ /\P{Syriac1}/, '\x{072F}, \p{Syriac1}'); Result on perl 5.12.3: Can't find Unicode property definition "Syriac1" at pat.t line 13. Result on perl 5.12.2: ok 1 - \x{0712}, \p{Syriac1} ok 2 - \x{072F}, \p{Syriac1} According to the following update of perl from 5.12.2 to 5.12.3, we know that creating custom properties by defining subroutines became strict and it should begin with "In" or "Is". So the update of perl and lsb test are out of phase and it cause these failures. commit d658a8a81c4f311bef688fd51df924a424429f14 Author: David Mitchell <davem@iabyn.com> Date: Sun Jan 16 14:16:20 2011 +0000 restrict \p{IsUserDefined} to In\w+ and In\w+ In L<perlunicode/"User-Defined Character Properties">, it says you can create custom properties by defining subroutines whose names begin with "In" or "Is". However, perl doesn't actually enforce that naming restriction, so \p{foo::bar} will call foo::Bar() if it exists. This commit finally enforces this convention. Note that this broke a number of existing tests for properties, since they didn't always use an Is/In prefix.