[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: something like perl's 'require 5.4'



Paul van Delst wrote:
> 
> JD Smith wrote:
> >
> > Craig Markwardt wrote:
> > >
> > > Vapuser <vapuser@catspaw.jpl.nasa.gov> writes:
> > > >   How about:
> > > >
> > > >   version=strupcase(strjoin(strsplit(!version.release,'[.-_]',/extract),""))
> > > >   input_version=strupcase(strjoin(strsplit(desired_release,'[.-_]',/extract),""))
> > > >   if version lt input_version then 'eeek'
> > > >
> > > >   Clearly `desired_release' would have to be input as a string.
> > > >
> > > >   Of couse, this method 'requires' IDL 5.3 (IIRC), to get the regular
> > > >   expression semantics of strsplit. The other question is will RSI use
> > > >   any separator in version designations besides these three?
> > >
> > > Umm, I never thought I'd be saying this, but aren't these a bit
> > > overengineered?  I have found that in 95% of the cases the DOUBLE
> > > compare will work, and in 4% of the cases the STRING compare will
> > > work.
> >
> > *cough*
> >
> > <REITERATE>
> >
> > IDL> print, double('5.4.1') gt 5.4
> >    0
> >
> > </REITERATE>
> 
> wot about
> 
> IDL> print, double('5.4.1') ge 5.4d0
>    1
> 

Because it's exactly the same!  Yes it's ge, but is it gt?

IDL>  print, double('5.4.1') gt 5.4d0
   0

IDL>  print, double('5.4.1') eq 5.4d0
   1

No it's not, it's eq.  Same problem.  So use this if you don't care
about the last digit and don't want to be open about it (it's not
exactly obvious this is the case).  Use the string compare method
otherwise.

> Doesn't assuage your other concerns regarding the significance of the last digit however.
> I use comparisons like the above for code that contains BREAK, CONTINUE, SWITCH, etc
> statements. Or similar for the version in which pointers and objects were introduced (5.2?
> can't remember).

The problem here is you'll not err cleanly... unknown control statements
will cause compile errors.  Not a lot that we can do about this.

JD