in reply to Argument "" isn't numeric in numeric le (<=)

I really didn't understand completely what you are trying to do. like what is $HoProPos{$snpID}?

Anyway 7 levels of "}" is very confusing to say the least and should be a super Red Flag.

Below I just settled for parsing the input and making a data structure. It might give you some hints on how to simplify your code. I didn't understand the basic terminology so the parsing of the line is probably more complex than need be.

A main point is that the depth level below is only 2 vs your 7 levels. The code below looks a bit strange because I don't understand the terminology or what you are trying to accomplish. I was not able to run your code.

Have fun with this...I hope that something is useful for you.

#!usr/bin/perl -w use strict; use Data::Dumper; my %Gene_DB; # a hash of hash while (<DATA>) { my $gene = (/^Gene:\s+(\S+)\s*/)[0] || next; add_gene($gene); } sub add_gene { my $gene = shift; my @tokens; my %gene_hash; while (<DATA>) { last if (/^-/); #End of Record next unless (/^\d/); #the single line we care about! @tokens = split; } #I probably don't understand OP right! #but first 3 on line, last 2 on line, then what's left over my ($Epitope, $Sequence, $Location) = splice(@tokens, 0, 3); my ($Strain, $Confidence) = splice(@tokens, -2); my ($Protein) = join (" ",@tokens); @gene_hash{'Epitope', 'Sequence', 'Location' ,'Strain', 'Confidence' ,'Protein'} = ($Epitope, $Sequence, $Location,$Strain, $Confidence,$Protein); $Gene_DB{$gene}=\%gene_hash; } print Dumper (\%Gene_DB); #prints: #$VAR1 = { # 'PF14_0747' => { # 'Protein' => 'Plasmodium falciparum', # 'Epitope' => '26850', # 'Confidence' => 'Medium', # 'Strain' => '3D7', # 'Location' => '1914-1917', # 'Sequence' => 'IKND' # }, # 'PF14_0711' => { # 'Protein' => 'Plasmodium falciparum', # 'Epitope' => '26850', # 'Confidence' => 'Medium', # 'Strain' => '3D7', # 'Location' => '9-12', # 'Sequence' => 'IKND' # } # }; # __DATA__ Gene: PF14_0747 TABLE: Epitopes from IEDB Epitope Sequence Location on Protein Strain Confidence 26850 IKND 1914-1917 Plasmodium falciparum 3D7 Medium ------------------------------------------------------------ Gene: PF14_0711 TABLE: Epitopes from IEDB Epitope Sequence Location on Protein Strain Confidence 26850 IKND 9-12 Plasmodium falciparum 3D7 Medium ------------------------------------------------------------

Replies are listed 'Best First'.
Re^2: Argument "" isn't numeric in numeric le (<=)
by hotel (Beadle) on Aug 25, 2009 at 00:18 UTC

    Dear Marshall, I do not know if you're interested in this code at all :) but let me clarify a little bit. Let me start with explaining what $HoProPos{$snpID} is.

    $HoProPos is a hash as can be understood, which contains positions of snps(single nucleotide polymorphisms) in a protein structure. snpIDs are key values of this hash and since every snp ID is unique I thought it's a good way to hash them for fast and easy access to their locations in the proteins through their names. now, where do I get this data at all, its not in the above code? I get/parse this data from another inputfile somewhere earlier in the code which i thought posting would be unnecessary.

    so, the thing I was trying to accomplish is basically. Parsing the first input file, storing snpIDs, in what genes (@geneArr) they are located at, and at what position of the that protein ($HoProPos{snpID}} (translated form of that gene) they are occurring.

    Then I open another file (the file above, in the original post) which has information about genes and the epitopes they contain. And I check if the gene name exists in my @geneArr which contains genes with snps inside, if exists, I check the location of the corresponding snp to see whether if that snp is located somewhere in between the start or stop point of the epitope (($locBeg <= $HoProPos{$snpID} && $snploc <= $HoProPos{$snpID})).

    As i said, the code works pretty fine right now. The only thing I could not understand as I said, when Perl threw warnings, the warnings were pointed to the lines with dashes. If I know a little bit programming the dashed lines never went into the if in which the comparison took place (before or after the substitution of .* with .+). So, I don't know why Perl pointed to those lines.

    Thank you for your time.
      Dear Hotel,

      I was genuinely trying to help you. Without you explaining what $HoProPos{snpID} is, I would have no way to understand it.

      I would make it a goal to have the code run "clean" without warnings being produced. At this instant in time, I am unable to provide the "magic answer" to your regex question. I will consider it and let you know if I figure it out.

      You should be aware that my post was meant in a positive way.