<div dir="ltr"><div class="gmail_default" style="font-family:trebuchet ms,sans-serif;font-size:small">Hi all,</div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif;font-size:small">I've been writing Perl for several years and I've always wondered that while text parsing is the most common thing done by all Perl programmers, why is there no lean and clean way to do it. Every time one has to write code like this:</div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">open FH, 'filename';</font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace"><br></font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">while (<FH>) {</font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">   if (m//) {</font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">      ## Some condition</font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">   } elsif(m//) {</font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">      ## Another condition</font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">   } else {</font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">      ## More</font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">   }</font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">}</font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace"><br></font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">close FH;</font></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-size:small"><span style="font-family:"trebuchet ms",sans-serif">This is unfortunate. So I thought I'd make it a little simpler. I've posted a CPAN package named </span><font face="monospace, monospace"><a href="https://metacpan.org/pod/Text::Parser">Text::Parser</a></font><font face="trebuchet ms, sans-serif">. It is a generic parser and you can very easily extend it to parse your own text formats by making a derived class, overriding just one method. If you do so, your main code could look this lean and mean:</font></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">use MyComplexTextFormatParser;</font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace"><br></font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">my $parser = MyComplexTextFormatParser->new();</font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">$parser->read('filename.complex_format');</font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">my (@records) = $parser->get_records();</font></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif;font-size:small">Try it out and feel free to give feedback or file issues on the <a href="https://github.com/balajirama/Text-Parser">GitHub repository</a> page.</div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif;font-size:small">Thanks,</div><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Balaji</div></div></div></div>