swuecho
12/16/2014 - 4:27 AM

fasta_2_oop.pl

use v5.20;
use DDP;

package Seq {
    use Moo;
    has [ 'id', 'comment', 'sequence' ] => ( is => 'rw' );
    1;
}

my $parser = do {
    use Regexp::Grammars;
    qr/
    <TOP>
    <nocontext:>
    <token: TOP>  <[record]>+
    <objtoken: Seq=record> <.start=(\>)><id><comment>?\n<sequence> 
    <token: id>  [^\-\s\n]+ 
    <token: comment> \s[^\n]+
    <token: sequence> <dna>|<rna>|<aa> 
    <token: dna> [ACGTRYKMSWBDHVNX\-\n]+ 
    <token: rna> [ACGURYKMSWBDHVNX\-\n]+ 
    <token: aa> [A-Z\*\-\n]+ 
    /;
};

my $content = <<'END';
>hello
GCTATATAAGC
>world prot
TATAKEKEKELKL
END

if ( $content =~ $parser ) {
    p %/;
}