|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Michael Samanov 2:550/5068.1515 28 Jul 2000 09:37:23 To : Sergey Dvorianinov Subject : Re: Посчитать файлы -------------------------------------------------------------------------------- Hello, Sergey! At Thu, 27 Jul 00 16:26:32 +0400 Sergey Dvorianinov wrote: SD> #!/usr/bin/perl SD> opendir DIR,'/images'; # на самом деле надо # while($file = readdir DIR) # либо # for $file (readdir DIR) # AFAIK нету такой конструкции как while $var (@arr), # в то время как есть для for SD> while $file (readdir DIR) SD> { SD> $a=$a+1; # $a++ гораздо красивше и обязательно проверяем, файл ли это, # потому что в этот же список попадут еще, как минимум, '.' и '..' $a++ if -f "/images/$file"; SD> } SD> closedir DIR; SD> print "$a"; Hу и несколько вариаций на заданную тему: opendir DIR, '/images'; $a++ for grep { -f "/images/$_" } readdir DIR; closedir DIR; print $a; opendir DIR, '/images'; print scalar grep { -f "/images/$_" } readdir DIR; closedir DIR; Тут, правда, если на чайниковском уровне, то до фига комментировать :-) Замечу лишь, что с использованием readdir в списочном контексте, наверное, создается временный массив, который нам вроде бы как не совсем нужен. Хотя ХЗ как там перл оптимизирует данный цикл, может, и обходится одними скалярами. Кстати, сроду не обращал внимания, что scalar @a и $#a дают разные значения. Просто, видимо, я никогда не пользовался конструкцией scalar @a. Sincerely yours, Michael (mailto:mike@vlink.ru). --- ifmail v.2.14 * Origin: Home (2:550/5068.1515@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/7949589cadb0.html, оценка из 5, голосов 10
|