[Bioperl-l] genbank parsing of multiple 'function' tags within primary tag
galeb abu-ali
abualiga2 at gmail.com
Thu Sep 8 14:34:41 EDT 2011
many thanks again, Chris! I was reading Programming Perl, but this sums it
up better.
On Thu, Sep 8, 2011 at 2:27 PM, Fields, Christopher J <cjfields at illinois.edu
> wrote:
> On Sep 8, 2011, at 12:51 PM, galeb abu-ali wrote:
>
> > thanks, Chris! works perfect.
> > To make sure I understand what's going on, forcing list context on $locus
> allows me to get one value at a time,...
>
> You have to be careful in this circumstance; doing this:
>
> my $foo = @bar;
>
> is scalar context on a list, which returns the number of elements in @bar.
> The following
>
> my ($foo) = @bar;
>
> forces list context and assigns the first value in @bar to $foo but tosses
> the rest. If you are sure there is only one value in @bar anyway, the above
> is fine (and is a common perl idiom).
>
> > which is then concatenated with \t to concatenated functions.
>
> I'm just using a simple join() to print off the results. Note the second
> element in the join list is an embedded join() with comma-sep values for
> functions.
>
> chris
>
> > thanks again!
> >
> > galeb
> >
> > On Thu, Sep 8, 2011 at 12:51 PM, Fields, Christopher J <
> cjfields at illinois.edu> wrote:
> > There is no need to do that if one is using the Bio::SeqFeatureI
> interface. Note that get_tag_values always returns a list, so to snag a
> single value for a tag in a scalar, force list context on the LHS by
> enclosing the variable in ().
> >
> > chris
> >
> > -----------------------------
> > #!/usr/bin/env perl
> >
> > use Modern::Perl;
> > use Bio::SeqIO;
> >
> > my $in = Bio::SeqIO->new(-format => 'genbank',
> > -file => shift);
> >
> > while (my $seq = $in->next_seq) {
> > for my $feat ($seq->get_SeqFeatures) {
> > next unless $feat->primary_tag eq 'CDS';
> > my ($locus) = $feat->has_tag('locus_tag') ?
> > $feat->get_tag_values('locus_tag') : '';
> > my @funcs = $feat->has_tag('function') ?
> > $feat->get_tag_values('function') : ();
> > say join("\t", $locus, join(',', at funcs));
> > }
> > }
> >
> >
> >
>
>
More information about the Bioperl-l
mailing list