From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Virus-Scanned: ScanPE,ScanELF,ScanOLE2,ScanMail,PhishingSignatures,ScanHTML X-Virus-Scanned: amavisd-new at telenet.dn.ua Date: Sat, 12 May 2007 15:37:54 -0000 To: "community@altlinux.ru" From: "Aleksander N.Gorohovski" Organization: DonNTU Content-Type: text/plain; format=flowed; delsp=yes; charset=koi8-r MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID: User-Agent: Opera Mail/9.20 (Linux) X-Agent: mailfromd (3.1.91) X-Virus-Status: NO X-Spamd-Status: NO X-Spamd-Score: 0.900 of 4.500 X-Spamd-Keywords: ALL_TRUSTED,BAYES_00,DATE_IN_FUTURE_03_06,FUZZY_XPILL Subject: [Comm] strange loop in PERL X-BeenThere: community@lists.altlinux.org X-Mailman-Version: 2.1.9rc1 Precedence: list Reply-To: ALT Linux Community List-Id: ALT Linux Community List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 12 May 2007 12:37:22 -0000 Archived-At: List-Archive: List-Post: Доброго времени суток сообщество! Обнаружил странное (необычное) выполнение циклов в 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 -- странность исчезнет. Может кто покомментировать это? или Ларри надо писать. Спасибо.