[Comm] strange loop in PERL

Aleksander N.Gorohovski =?iso-8859-1?q?angel_=CE=C1_feht=2Edgtu=2Edonetsk=2Eua?=
Сб Май 12 19:37:54 MSD 2007


Доброго времени суток сообщество!

Обнаружил странное (необычное) выполнение циклов в PERL.
Странность заключается в том, что прерывание (командой last) одного цикла
сказывается на выполнении такого же другого следующего
(в нём пропускается одна первая иттерация).
:(

Вот пример программки:
#----------------------------------------------
#!/usr/bin/perl

%w=('a'=>'1', 'b'=>'2');

$Dmax=1; $Dmin=0;

$Hr=120; $h=0;

$Tmax=100; $Tmin=0;

while(abs($Hr-$h)>=.1){
     $h++;
     print"\n$h\t";

# !!!!!!   ERROR   !!!!!!!!!!!!
     while(my($n,$v)=each(%w)){
	print"$n => $v\t";
     }
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!

     if(abs($Tmax-$Tmin)<.1){

	while(my($n,$v)=each(%w)){
	    next if $Dmax-$Dmin<0.0001;
	
	    $Dmin=$alf if $h<$Hr;
	    $alf=($Dmin+$Dmax)/2;

	    last; #!!!!   ERROR   !!!!!!!
	}
     }else{
	$Tmin++;
     }
}
exit;
#----------------------------------------------
Если один из while-циклов поменять, например, на for -- странность  
исчезнет.

Может кто покомментировать это?
или Ларри надо писать.

Спасибо.



Подробная информация о списке рассылки community