Tommy Grav wrote:
> I have a code where I want to check wether a number is bigger than or 
> smaller than some limits, $maxdet and $mindet.  These two values are
> given on the  command line using the Getopt::Long module.
> 
> However it seems like the code evaluates the if statement as a string 
> (since numbers between 20 and 30 also triggers the loop (when
> $mindet=200 and $maxdet=300).  Any idea what I am doing wrong???

You might have that problem if you were using the 'gt' and 'lt' operators
however your code is using the '>' and '<' operators which give the correct
behaviour.

> use strict ;
> use warnings ;
> 
> use Getopt::Long ;
> use Data::Dumper ;
> use Pod::Usage ;
> 
> use PS::MOPS::DC::SSM ;
> use PS::MOPS::DC::Detection ;
> 
> my $object ;
> my $orb ;
> my $orb_i ;
> my $in_fname ;
> my $orbit_elements ;
> my $maxdet = 100000 ;
> my $mindet = 0 ;
> 
> GetOptions('object=s'=>\$object,
>            'maxdet=i'=>\$maxdet,
>            'mindet=i'=>\$mindet,
>            'infile=s'=>\$in_fname) or pod2usage(2) ;
> 
> open INFILE, "< $in_fname" ;
> open LOGFILE, ">> output.log" ;

You should *ALWAYS* verify that the files were opened correctly.

open INFILE, "< $in_fname"    or die "Cannot open '$in_fname' $!";
open LOGFILE, ">> output.log" or die "Cannot open 'output.log' $!";

> while(<INFILE>) {
>     my ($tmp1, $tmp2, $tmp3, $tmp4, $tmp5, $tmp6, $tmp7, $tmp8,  $name)
> = split ;

You are needlessly creating eight variables:

     my (undef, undef, undef, undef, undef, undef, undef, undef, $name) = split;

Or using a list slice:

     my $name = ( split )[ 8 ];

>     $orbit_elements = modcs_retrieve(objectName=>$name) ;
> 
>     if($name =~ /^$object/) {
>         printf(LOGFILE " The object is %s    - ", $name) ;
> 
>         my $num_detections = 0 ;
>         my $detection ;
>         my @detection_id ;
>         my $detection_list = modcd_retrieve(objectName=>$name) ;
> 
>         while ($detection=$detection_list->next) {
>             $num_detections++ ;
>             #$num_detections = push @detection_id, $detection ;
>         }
>         printf(LOGFILE "The number of detections : %4d   %4d   %4d   
> \n", $num_detections, $mindet, $maxdet) ;
> 
>         if(($num_detections > $mindet) and ($num_detections <  $maxdet)) {
>             my $out_fname = $name . ".eph" ;
>             my $success = open OUTFILE, "> $out_fname" ;
>             if(not $success) {
>                 printf("The file $out_fname could not be opened \n") ;

You shouldn't use interpoled variables in printf format strings, either:

                printf "The file %s could not be opened \n", $out_fname;

Or:

                print "The file $out_fname could not be opened \n";



John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to