Marcus Claesson wrote:
> > lt, gt etc. are used for string comparisons. Change 'lt' to < and
> > 'gt' to > and your code should work. 
> > 
> 
> You're right, but this script was a simplification of a
> bigger one where
> '>' didn't work (my mistake to not spot the difference...). Here is a
> more 'real' situation: 
> 
> Input file:
> 4635a   1e-180  BL0976
> 4635a   0       BL0978
> 4635a   1e-10   BL1343
> 4635a   8e-86   BL1774
> 4635a   6e-18   Blon1206
> 4635a   1e-123  BL1165
> 4635a   5       BL0978
> 4635a   50      BL0978
> 
> Script:
> 
> while (<>) {
>     @row = (split /\t/);
>     ($contig,$E_value,$locus_tag) = (@row);
>     if ($E_value < 1e-50) {
>         print "$E_value\t SMALL\n";
>     } elsif (($E_value > 1e-50) && $E_value < 5) {
>         print "$E_value\t BIGGER\n";
>     } elsif ($_ > 5) {

This should be referencing $E_value, not $_.

>         print "$E_value\t BIGGEST\n";
>     }
> }

This whole thing should be simplified:

    while(<>) {
        my ($contig,$E_value,$locus_tag) = split;
        if ($E_value < 1e-50) {
            print "$E_value\t SMALL\n";
        } elsif ($E_value < 5) {
            print "$E_value\t BIGGER\n";
        } else {
            print "$E_value\t BIGGEST\n";
        }
    }

> 
> And I then get this:
> 1e-180   SMALL
> 0        SMALL
> 1e-10    BIGGER
> 8e-86    SMALL
> 6e-18    BIGGER
> 1e-123   SMALL
> Argument "\x{34}\x{36}..." isn't numeric in numeric gt (>) at
> /home/marcus/Scripts/string2num.pl line 7, <> line 7. 5        BIGGEST
> Argument "\x{34}\x{36}..." isn't numeric in numeric gt (>) at
> /home/marcus/Scripts/string2num.pl line 7, <> line 8. 50       BIGGEST
> 
> Thus, the operator isn't always correct and is not very
> accepted by perl

The operator is correct. Your program has a bug.

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to