![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| ramus |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 21.2.2008 Репутация: 1 Всего: 1 |
попробовал
Ругается
Это и понятно, так как я загружаю файл file_rules через do или require, а там свое адресное пространство, хотя имя пакета main я не переопределяю. Если в текущем блоке сказать our переменная, то тогда видит. Либо попытаться реализовать do своими силами что то типа eval (`cat $file_rules`) то есть зачитать файл в текущем блоке. Я остановился на первом варианте - тоесть выбираю все переменные в строке для eval и объявляю их в текущем блоке - все замечательно работает и не надо свой анализатор кода изобретать |
||||
|
|||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
||||
|
||||
| ramus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 21.2.2008 Репутация: 1 Всего: 1 |
Ну не знаю, тут привычка скорее. Просто в начале программирования на перл я без нее столько ошибок наплодил без понимания. Считаю, что в промышленном коде она должна быть. Да и обошел я ее. Тем не менее спасибо за помощь, ибо когда кончались идеи, новые я черпал здесь на сайте. |
|||
|
||||
| ramus |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 21.2.2008 Репутация: 1 Всего: 1 |
Уперся теперь в производительность :(
есть директория с 20 000 файлов
проходит менее чем за 1 секунду. А вот проверка файл или директория (если директория, то добавить к имени файла "/") работает за 20-25 секунд. Код такой
да к тому же мне нужно отобрать около 80 файлов по условию находящемуся в переменной $files ( зачитывается из конфигурационного файла) $files=' ( $_ =~ m/^[rsa]4030/i ) && ( $_ !~ m{\/$} )'
этот блок еще работает секунд 12. на этом же серваке, в этой же директории команда shell ls -p $[dir_src} | grep -i '^[rsa]4030' | grep -v '/$' отрабатывает менее чем за 1 секунду что делать ? как ускорить? пробовал сделать так
ругается на синтаксис |
||||||||
|
|||||||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
PS там в коде - опечатка if ( $_ =~ '^\.\.? ) |
|||
|
||||
| ramus |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 21.2.2008 Репутация: 1 Всего: 1 |
Да, опечатался. Набирал из дома. Правильный код if ( $_ =~ m/^\.\.?/ ) или if ( $_ =~ m/^\.{1,2}/ )
У меня тоже сервак древний. Возможно у меня задержки из за латентности, так как реально файловая система подцеплена по NFS с другого сервера и 20_000 проверок по сети делать дорого, вместо одного запроса. Буду экспериментировать. А вот как бы ускорить этот код, чтобы не делать 20_000 eval ?
Результаты эксперимента: на локальной FS время работы 1 секунда на все на FS по NFS время работы 1-2 секунды на чтение (readdir) + 6 !!! минут на проверку -d для 20_000 файлов правда на серваке сейчас идет работа и соответственно сильная загрузка... вчера было 20-25 секунд. Это сообщение отредактировал(а) ramus - 13.5.2008, 10:32 |
||||||
|
|||||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
На самом деле эти 20_000 eval не так уж сильно замедляют:
|
|||
|
||||
| ramus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 21.2.2008 Репутация: 1 Всего: 1 |
у меня получилось 1/10, но 1 секунда против 10. сервак ОЧЕНЬ старый HP L1000, частота процессора всего 450 МГц. Видимо дело в этом. на персоналке выполняется в 10 раз быстрее. а за код с 1 eval спасибо, чтото сам не додумался :( А как все просто оказалось |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |