Thanks to all for your help. I've got some skip token weirdness.
What the difference between the two skip definitions in lines 23 and 24?
20 my $pf99_grammar = q{
21 { $DB::single = 1;
22 use Data::Dumper;
23 $skip = qr/,?/;
24 $Parse::RecDescent::skip = qr/,?/;
25 }
.... further down in the grammar I have the following lines:
319 sock4110 : { print "skip: ".$Parse::RecDescent::skip." \n";
320 print "skip: ".$skip." \n";
321 }
322 timestamp meta
result 1) test pattern matches successfully
result 2) Pattern failure occurs because a literal comma is needed to
complete the match between two tokens: timestamp and meta
result 3) line 319 prints "skip: \s*"
result 4) line 319 prints "skip: (?-xism:,?)"
result 5) line 320 prints "skip: \s*"
result 6) line 320 prints "skip: (?-xism:,?)"
TEST 1) leave lines 20-25 as stated RESULT: 1, 4, 6
TEST 2) Delete line 23, leave line 24 RESULT: 2, 4, 5
TEST 3) Delete line 24, leave line 23 RESULT: 2, 3, 6
Tracking this problem down really screwed me up the last couple of days.