Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: Посчитать файлы   Michael Samanov   28 Jul 2000 09:37:23 
Архивное /ru.cgi.perl/7949589cadb0.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional