"Sean O'Dell" <sean / celsoft.com> schrieb im Newsbeitrag
news:200406141559.01604.sean / celsoft.com...
> On Monday 14 June 2004 15:47, Mark Hubbart wrote:
> > On Jun 14, 2004, at 2:58 PM, tony summerfelt wrote:
> > > while(<binkd>)
> > > {
> > >     # date parsing code was here
> > >      @diff=Delta_DHMS(@binkdate,@today) if /(\[\d+\])/;
> > >      print $trimmed $_ if $diff[0] < $ARGV[1] && defined(@diff);
> > >      next  if defined(@diff);
> > >      print $trimmed $_ if ! /(\[\d+\])/;
> > >      undef(@diff);
> > > }
> >
> > testing whether diff is defined won't work in ruby anyway. Any time
you
> > have an expression like this:
> >
> >    foo = 23 if expression
> >
> > foo ends up being automagically defined anyway. After running that
> > code, if expression is false, foo == nil.
> >
> > So, as Sean says, it would probably be better to use nil, unless
> > Delta_DHMS might return nil itself.
>
> Oh!  Which brings to mind something really neat I figured out awhile
ago.  If
> Delta_DHMS really can return nil as a valid value, try re-writing the
code
> like this:
>
> {
>     # date parsing code was here
>      @diff=Delta_DHMS(@binkdate,@today) if /(\[\d+\])/;
>      print $trimmed $_ if $diff[0] < $ARGV[1] && @diff != :undefined;
>      next  if @diff != :undefined;
>      print $trimmed $_ if ! /(\[\d+\])/;
>      @diff = :undefined;
> }
>
> Initialize @diff = :undefined in your class initialize method.
:undefined
> will be a Ruby symbol that gets created on its first use.  From there on
out,
> just set @diff to :undefined whenever you need to "undefine" it.

To me this seems simpler:

while ( diff = /(\[\d+\])/ && Delta_DHMS(@binkdate, @today) )
  print ...
end

    robert