Thanks PAul, That solves half my problem.I am working on it.If I need more help,I will post it up.
-Min On 12/4/07, Paul Lalli <[EMAIL PROTECTED]> wrote: > On Dec 4, 11:06 am, [EMAIL PROTECTED] (Minky Arora) wrote: > > I am quite new to perl so pls bear with me.I am trying to do some > > Bioinformatics Analysis.A part of my file looks like this: > > > > gene 410..1750 > > /gene="dnaA" > > /db_xref="EMBL:2632267" > > CDS 410..1750 > > /gene="dnaA" > > /function="initiation of chromosome replication (DNA > > synthesis)" > > /note="alternate gene name: dnaH, dnaJ, dnaK" > > /codon_start=1 > > /transl_table=11 > > /protein_id="CAB11777.1" > > /db_xref="GI:2632268" > > > > I need to extract the range for gene as well as CDS and compare them. > > > > SO far this is where Ive reached: > > #!/usr/bin/perl > > use warnings; > > use strict; > > my $line; > > my @new; > > my $line1; > > open FILE,"/users/meenaksharora/bio.txt"or die"cannot open $!\n"; > > foreach $line(<FILE>){ > > if($line=~m/gene/) > > [EMAIL PROTECTED]; > > This line most likely does not do what you think it does. Are you > trying to add every line that matches 'gene' to the array? That's > not what this does. This overwrites the existing @new contents, > setting @new to be the last value of $line that matches 'gene'. In > your example data, this is the second '/gene="dnaA"' line. > > > }} > > > > foreach $line1(@new){ > > So by the time you get to here, @new only has one element in it, and > you're iterating over that one element - '/gene="dnaA"'. This line > obviously doesn't have any numbers in it, so the regexp fails. > > > if($line1=~m/(\d)+\.\./) > > { print $line1;print "hello"; > > } > > > > } > > > > I am not able to extract the lines with the digits.I am not sure > > why.IS there a better way to do this?? Can someone guide me how to go > > abt that? > > You need better debugging skills, which will likely develop over > time. You're assuming there's a problem with your regexp, when > there's actually a problem with your array. If you'd printed the > contents of your array before the loop, you would have seen that. > > change > @new = $line; > to > push @new, $line; > so that each matching value of $line gets added to the end of @new, > rather than overwriting the existing contents. > > push @new, $line > means roughly the same thing as > @new = (@new, $line); > except it's more efficient. > > Think of 'push' as the same sort of shortcut as the .= operator, so > you can write > $text .= $string; > rather than > $text = $text . $string; > > perldoc -f push > for more information. > > Paul Lalli > > > -- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > http://learn.perl.org/ > > > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/