Geetha Weerasooriya wrote:
>
> Dear all,
>
> When I was reading a Perl code I found the following line. Can u
> please explain what it means?
>
> !defined($rt_nearest) or $dh<$dist or next;

Hi Geetha

Oh dear, it's not very readable is it! I assume you know what 'next'
does. If not, look at perldoc -f next. The statement uses what is called
the 'short-circuit' behaviour of the or operator. perldoc perlop says
this:

:: Binary "||" performs a short-circuit logical OR operation. That is,
:: if the left operand is true, the right operand is not even evaluated.
:: Scalar or list context propagates down to the right operand if it is
:: evaluated.

So if $rt_nearest is defined then nothing else happens. If it is
undefined but $dh < $dist then again nothing happens. If both are false
then the next is executed to go to the next iteration of the loop. It's
the same as:

  next unless !defined($rt_nearest) or $dh<$dist;

or, more clearly

  next if defined($rt_nearest) and $dist < $dh;

which is how it should have been written. It's now clear that the loop
is looking for the 'nearest' of a list of objects. If an object has
already been found ($rt_nearest is defined) and its distance is less
than that of the current object ($dist < $dh) then go to the next in the
list.

HTH,

Rob

--
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