perltest revision 4d553781254e46f1dfc8d86b79667a74fb8a3eb5
# Program for testing regular expressions with perl to check that PCRE handles
# them the same. This is the version that supports /8 for UTF-8 testing. As it
# stands, it requires at least Perl 5.8 for UTF-8 support. For Perl 5.6, it
# can be used as is for non-UTF-8 testing, but you have to uncomment the
# "use utf8" lines in order to to UTF-8 stuff (and you mustn't uncomment them
# for non-UTF-8 use).
# Function for turning a string into a string of printing chars. There are
# currently problems with UTF-8 strings; this fudges round them.
sub pchars {
my($t) = "";
if ($utf8)
{
# use utf8; <=============== For UTF-8 in Perl 5.6
foreach $c (@p)
{
}
}
else
{
{
}
}
$t;
}
# Read lines from named file or stdin and write to named file or stdout; lines
# consist of a regular expression, in delimiters and optionally followed by
# options, followed by a set of test data, terminated by an empty line.
# Sort out the input and output files
if (@ARGV > 0)
{
}
if (@ARGV > 1)
{
}
# Main loop
for (;;)
{
$pattern = $_;
{
$pattern .= $_;
}
$pattern =~ s/\s+$//;
# The private /+ modifier means "print $' afterwards".
# The private /8 modifier means "operate in UTF-8". Currently, Perl
# has bugs that we try to work around using this flag.
# Check that the pattern is valid
if ($utf8)
{
# use utf8; <=============== For UTF-8 in Perl 5.6
eval "\$_ =~ ${pattern}";
}
else
{
eval "\$_ =~ ${pattern}";
}
if ($@)
{
next NEXT_RE;
}
# If the /g modifier is present, we want to put a loop round the matching;
# otherwise just a single "if".
# If the pattern is actually the null string, Perl uses the most recently
# executed (and successfully compiled) regex is used instead. This is a
# nasty trap for the unwary! The PCRE test suite does contain null strings
# in places - if they are allowed through here all sorts of weird and
# unexpected effects happen. To avoid this, we replace such patterns with
# a non-null pattern that has the same effect.
# Read data lines and test them
for (;;)
{
s/\s+$//;
s/^\s+//;
$x = eval "\"$_\""; # To get escapes processed
# Empty array for holding results, then do the matching.
"push \@subs,\$1;" .
"push \@subs,\$2;" .
"push \@subs,\$3;" .
"push \@subs,\$4;" .
"push \@subs,\$5;" .
"push \@subs,\$6;" .
"push \@subs,\$7;" .
"push \@subs,\$8;" .
"push \@subs,\$9;" .
"push \@subs,\$10;" .
"push \@subs,\$11;" .
"push \@subs,\$12;" .
"push \@subs,\$13;" .
"push \@subs,\$14;" .
"push \@subs,\$15;" .
"push \@subs,\$16;" .
"push \@subs,\$'; }";
if ($utf8)
{
# use utf8; <=============== For UTF-8 in Perl 5.6
}
else
{
}
if ($@)
{
next NEXT_RE;
}
{
}
else
{
{
$last_printed = 0;
for ($i = 1; $i <= 16; $i++)
{
{
while ($last_printed++ < $i-1)
$last_printed = $i;
}
}
}
}
}
}
# printf $outfile "\n";
# End