Hello Monks,
Long time no see! Recently I have to parse a file and export to another format. the original file is like this:
Y 034309201607258 1 #Y means header
Q 02751VACANT / CLOSE #comment
G .... # inner head
...
...
...
T RCRC 0810010
T RDRD 0810010
A 22OP
A 13O
A 12O
P 3472CHSK00010014 #P means inner trailer
Z 034309201607258 #Z means trailer
I took this weekend to learn P::RD, and seems a little bit to understand it. but when I tried some snippet to run, it's hard to succeed as I image:
use Parse::RecDescent;
use IO::All;
my $text = io("xxx.DAT")->slurp;
# Create and compile the source file
$parser1 = Parse::RecDescent->new(q(
startrule : HeadRule /.+/ms TrailerRule
HeadRule : /^Y.+$/m
TrailerRule: /^Z.+$/m
));
$parser2 = Parse::RecDescent->new(q(
startrule : HeadRule
HeadRule : /^Y.+^Z.+$/ms
));
# Test it
print "Valid data\n" if $parser1->startrule($text); #no!
print "Valid data\n" if $parser2->startrule($text); #yes
why parser1 is failed? and in order to learn P::RD, Could anyone tell me if some module parsing files( like xml or html etc> on cpan make use of P:RD?
Thanks
I am trying to improve my English skills, if you see a mistake please feel free to reply or /msg me a correction