in reply to Re^2: How to format fasta file
in thread How to format fasta file

Hi andyBio,

the program I posted did not have any of the errors or warnings that you report. This most probably means that the error is somewhere in the changes you made to the code.

Although I have some ideas on what might be wrong in your program (along the hints supplied by other monks), we can't fix a program that we don't see. The only way we can help you is if you show the code you're now using, with the changes you made.

Replies are listed 'Best First'.
Re^4: How to format fasta file
by andyBio (Novice) on Apr 11, 2016 at 18:17 UTC
    Thanks a lot, Laurent R. Here is my complete code:
    #!/usr/bin/perl -w use strict; use warnings; my $num_args = @ARGV; if ($num_args != 3) { print "\nUsage: $0 (-q|-a) <species> <input.(fq|fa)>"; print "\nUse -q for fastq and -a for fasta files"; exit; } my $key=$ARGV[0]; my $species=$ARGV[1]; my $input=$ARGV[2]; if ($key ne "-q" && $key ne "-a"){ print "Unexpected option: $key, use -q or -a.\n"; exit; } if($key eq "-q") { print "Option q was selected.\n"; exit; } elsif( $key eq "-a" ) { print "Option a was selected.\n"; my %count_seq; open(my $fh, '<:encoding(UTF-8)', $input); while ($fh) { chomp; next if /^>/; # discard headers next if length($_) > 30 or length($_) < 15; # discard unwanted + sizes $count_seq{$_}++; # count occurrences } print "$_\t$count_seq{$_}\n" for keys %count_seq; exit; }
    And here is how I run it:
    perl test.pl -a spe try.txt > result
    It accepts either -q or -a as options. The error I get is this:
    Use of uninitialized value $_ in scalar chomp at test.pl line 39. Use of uninitialized value $_ in pattern match (m//) at test.pl line 4 +0. Use of uninitialized value $_ in numeric gt (>) at test.pl line 41.
      Hi andyBio,

      try to change these two lines:

      open(my $fh, '<:encoding(UTF-8)', $input); while ($fh) {
      as follows:
      open my $fh, '<:encoding(UTF-8)', $input or die "Cannot open $inpu +t $!"; while (<$fh>) {
      The main change is on the while line (the (<$fh>) part), but checking whether the program could open the file is also essential.

      A few more things could be improved, but the above corrections should get you where you want.

        Thanks a bunch, Laurent R. No more errors! :-)