|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Andrey Sapozhnikov 2:5020/400 30 Mar 2002 03:11:30 To : Victor Wagner Subject : Re: Hесколько вопросов к Ан дрею -------------------------------------------------------------------------------- l.su> <a825he$18jv$1@ddt.demos.su> <3CA4A6AA.7020604@icb.chel.su> l.su> <3CA4AB16.3D03F9C@apmsun.mpei.ac.ru> <3CA4AE35.9010904@icb.chel.su> l.su> <a82ied$bsq$1@wagner.wagner.home> From: "Andrey Sapozhnikov" <sapa@icb.chel.su> "Victor Wagner" <vitus@45.free.net> wrote in message news:a82ied$bsq$1@wagner.wagner.home... > Andrey Sapozhnikov <sapa@icb.chel.su> wrote: > > AS> Konstantin Tokar wrote: > >>>В определенных случаях эта конструкция может не отработать > > >>> > >> Сработает. while(<>) - специальный случай while и окончание > >> цикла - не булевское условие в скобках. > > AS> Hе сработает. Внимательно перечитываем письмо. Там в > AS> скобках выражение присваивания: while ($FileLine = <FILE>), > AS> а не while (<FILE>). Про то, что второй вариант является > AS> исключением, я прекрасно знаю. > > Андрей, в следующий раз читай документацию прежде чем так говорить. > Я тоже хотел то же самое ответить, но что-то (возможно, мрачный взгляд > Артема Чуприны в спину) меня остановило. Я полез в perldoc perlop > > А там написано: > > Anyway, the following lines are equivalent to each other: > > while (defined($_ = <STDIN>)) { print; } > while ($_ = <STDIN>) { print; } > while (<STDIN>) { print; } > for (;<STDIN>;) { print; } > print while defined($_ = <STDIN>); > print while ($_ = <STDIN>); > print while <STDIN>; > > and this also behaves similarly, but avoids the use of $_ : > > while (my $line = <STDIN>) { print $line } Действительно, в документации к 5.6.1 все так и написано. Hо свою ошибку признаю лишь частично. Вот цитата из perldoc perlop для perl 5.003: .... If and ONLY if the input symbol is the only thing inside the conditional of a while loop, the value is automatically assigned to the variable $_. The assigned value is then tested to see if it is defined. (This may seem like an odd thing to you, but you'll use the construct in almost every Perl script you write.) Anyway, the following lines are equivalent to each other: while (defined($_ = <STDIN>)) { print; } while (<STDIN>) { print; } for (;<STDIN>;) { print; } print while defined($_ = <STDIN>); print while <STDIN>; Выходит, что я перестраховался упустив эти изменения в новых версиях из виду. Я для более старых я прав. Чтож, плохо... но лучше чем недостраховаться, не так ли? Андрей P.S. Hе попросишь у Артема его фотографию с пристальным взглядом? Хочу повесить у себя за спиной. :) --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/6577a9bce88e.html, оценка из 5, голосов 10
|