|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Yuriy Kaminskiy 2:5020/517.21 09 Sep 2001 03:02:20 To : Popov Nikita Valentinovich Subject : Re: Про получение списка фа йлов -------------------------------------------------------------------------------- >>>>> On 12:48 08/9/2001, poksh@ccfit.nsu.ru writes: >> Вот состряпал код, который бы получал список файлов в >> каталоге и подкоталогах, но что-то не хочет работать. Исправьте плз что >> неправильно. >> &get_list("$SEARCH_DIR"); >> sub get_list { >> local($SEARCH_ROOT, $search_sub) = @_; >> chdir("$SEARCH_ROOT$search_sub"); >> local(@filenames) = <*>; Однако :-| >> local($file); >> foreach $file (@filenames) { >> if (-d $file && -r $file){ >> if ($search_dir){&get_list (SEARCH_ROOT, "$search_sub$file");} ^^ >> else{&get_list (SEARCH_ROOT, $file);} ^^ >> } >> else {&search_in_file ("$file");} >> }} >> >> PNV> Вот рабочий вариант: PNV> ------------------------------------------------- PNV> #!/usr/bin/perl -w PNV> sub get_list { PNV> my @list = (); PNV> my $root = shift; PNV> my $sub_root = shift || ""; PNV> $root=~s#/$##; PNV> $sub_root=~s#/$##; PNV> $sub_root.="/" if $sub_root; PNV> my @filenames = `ls $root/$sub_root`; И того хуже. <...skip by yuk...> Мда. Клиника, однако :-| perldoc File::Find (входит в поставку как минимум 5.004_04+). Для тех, кто любит изобретать велосипед [или имеет крайне специфические потребности] - perldoc -f opendir readdir closedir perldoc perlsub perldoc perlre PNV> foreach my $file (@filenames) { PNV> chomp $file; PNV> $file = "$sub_root$file"; PNV> push(@list,$file); PNV> if ((-d "$root/$file") && (-r "$root/$file")){ PNV> push(@list, get_list($root, $file)); PNV> } PNV> } PNV> return @list; PNV> } PNV> print join(' ',get_list(shift))."\n"; -- Yuriy Kaminskiy. --- Gnus v5.2.25/XEmacs 19.14 * Origin: none (2:5020/517.21@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/174273f7c0b75.html, оценка из 5, голосов 10
|