- Помогите разобрать код, ihor, 18:03 , 03-Авг-05 (1)
если масив @argv пустой, или не существует, @ARGV станет одноелементым массивом, единственный елемент которого -- '.'
- Помогите разобрать код, Sereg, 18:10 , 03-Авг-05 (2)
А этот массив argv - для чего он вообще предназначен? И какой смысл в этом присваивании если эта строка стоит в самом начале кода? Сорри за глупые вопросы..
- Помогите разобрать код, ihor, 19:07 , 03-Авг-05 (3)
@ARGV -- это массив, в который записываются аргументы коммандной строки, с кот. запускался перловсий скрипт. @ARGV и @argv - разные переменные. @argv может быть определён где - то в другом месте. до использования @argv есть директивы require?
- Помогите разобрать код, Sereg, 12:33 , 04-Авг-05 (4)
Пардон, Ihor, за задержку. Вот полный код: open(log1,'>log1'); @ARGV = qw(.) unless @argv; use File::Find; find sub { print log1 $File::Find::name, -d && '/'. "\n"}, @ARGV; close(log1) Программка записывает в файл имена всех файлов и подкаталогов. Одна проблемка: все имена файлов подкаталога пишутся сплошной строкой, а как сделать на каждый файл отдельную строку шот мозгов не хватает...
- Помогите разобрать код, ihor, 13:04 , 04-Авг-05 (5)
по всей видимости, имелось в виду вот что: # ======================================= open(log1,'>log1'); @ARGV = qw(.) unless @ARGV; use File::Find; find sub { print log1 $File::Find::name, -d && '/', "\n"}, @ARGV; close(log1) # ====================================== но стиль -- жуткий(IMHO)
- Помогите разобрать код, Sereg, 13:23 , 04-Авг-05 (6)
Дык, может подскажете как сделать печать каждого файла в отдельной строке?
- Помогите разобрать код, ihor, 13:26 , 04-Авг-05 (7)
вот то, что я написал, уже с нужными исправлениями
- Помогите разобрать код, Sereg, 14:46 , 04-Авг-05 (8)
Сразу 2 вопроса: 1. Я так понял из Ваших объяснений во второй строке создаётся одноэлементный массив ARGV и $ARGV[0]='.'? А почему нельзя вставить qw(a)? Пишет не могу найти путь или директорию? 2. Далее в 4-й строке ....."}, @ARGV - что это означает? Почему, допустим, без @ARGV программа не работает? 3. И на последок: как сделать, что бы имена файлов выводились с полными относительными путями?
- Помогите разобрать код, Sereg, 15:09 , 04-Авг-05 (9)
Кстат, оказывается под виндой с этой задачей отлично справляется dir /s /b > log
- Помогите разобрать код, ihor, 15:32 , 04-Авг-05 (10)
идея такая: скрипт получает из коммандной строки список каталогов, которые он потом обходит и выводит все файлы и каталоги, кот. содержаться в заданных каталогах. если скрипт запускается без аргументов, он считает, что нужно сделать работу для текущего каталога. итак, если скрипт вызывался со списком каталогов в коммандной строке, этот список будет содержаться в @ARGV. если в коммандной строке ничего не было, т.е. @ARGV -- пустой, помещаем в @ARGV текущий каталог -- '.', т.е. @ARGV = ('.') (или, что то - же самое @ARGV = qw(.)). если вы вставите вместо qw(.) - qw(a), это будет значить, что вы задаёте для обхода подкаталог 'a' текущего каталога. если у вас такого подкаталога нет -- получите указанную ошибку. 'find sub { print log1 $File::Find::name, -d && '/', "\n"}, @ARGV;' -- знасит следующее: мы вызываем функцию find, в качестве первого аргумента указываем ссылку на функцию, кот, будет вызываться для каждого найденного файла/каталога, в качетсве второго -- список, кот. содержит каталоги, кот. нужно обойти, в нашем случае - @ARGV. реальный обход деревьев выполняет именно 'find'. т.о. если вы не укажете второй аргумент, функция вылетит с ошибкой или ничего делать не будет. ответ на 4 -- укажите в коммандной строке полный путь к каталогу, или запишите его вместо '.' в @ARGV. напр. @ARGV = ('/usr/local') или @ARGV = ('c:\TEMP') (в Windows).
- Помогите разобрать код, Sereg, 18:11 , 04-Авг-05 (11)
Спасибо, многое прояснилось, однак @ARGV = qw('e:\temp') unless @ARGV; всё равно не работает, не находит путь почему-то... @ARGV = qw('/usr/bin') unless @ARGV; - тож самое... Насчёт вопроса №3, я получаю примерно след. результат ./ERWREW/SHGF/ ./ERWREW/SHGF/gfsfdg.txt ./install.log а мне нужно ./ERWREW/SHGF/ ./ERWREW/SHGF/gfsfdg.txt ./ERWREW/SHGF/install.log Может подскажите чего?
- Помогите разобрать код, ihor, 19:09 , 04-Авг-05 (12)
qw('e:\temp') qw('/usr/bin')-- кавычек не надо, т.к. фунция qw сама добавляет кавычки, т.е. должно быть просто qw(e:\temp). вообще qw(word1 word2 word3 word4) эквивалентно ('word1', 'word2', 'word3', 'word4'). ./install.log -- файл, который лежит в текущем каталоге ./ERWREW/SHGF/install.log -- файл, который лежит в каталоге SHGF, который лежит в каталоге ERWREW, который лежит в текущем каталоге, так что это разные файлы. может, я вопрос не понимаю?
- Помогите разобрать код, Sereg, 10:52 , 05-Авг-05 (13)
Запустите под виндой dir /s /b > log В log как раз то, что мне нужно. Мне интересно есть что-то более менее стандартное в перле для получения такого файла? - Помогите разобрать код, Sereg, 11:00 , 05-Авг-05 (14)
Огромное спасибо, Ihor, всёполучилось.
|