| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > require |
| Автор: rcdimon 25.6.2005, 20:10 | ||||
| Я хочу огромную программу раскидать по отдельным файлам. Хочу в разные файлы впихнуть сходные по функциям подпрограммы. Но почему то не все работает. Вот это код основной программы
А это код того файла, который подсоединяется в главном
Так вот ничего не работает. А если я соединяю просто в один файл, то все ОК. ПОчему? Помогите, пожалуйста! |
| Автор: korob2001 25.6.2005, 22:06 | ||
В конец каждого подгружаемого файла добавь единицу и удали первую строку, она не нужна:
Удачи. |
| Автор: TwiSteR 26.6.2005, 00:00 |
| korob2001 Че-то у меня тоже не получается, даже 1 (конец) указываю, не работает |
| Автор: korob2001 26.6.2005, 07:56 | ||||
| Вот эти два файла сохрани в один тот же каталог: файл first.pl
файл second.pl
Запусти файл first.pl в результате, на выходе увидишь число которое указано в переменной $num в квадрате. Удачи. |
| Автор: sharq 26.6.2005, 13:02 |
| rcdimon лучше всего использовать не require, а use, т.е. используй модульное программирование. Так будет работать на много быстрее и это правильный подход к программированию. Создавай модули и у тя проблем не будет. |
| Автор: sharq 26.6.2005, 13:32 | ||||
| Вот пример: Модуль Tools.pm
Основной скрипт index.cgi
Только index.cgi и Tools.pm должны лежать в одной директории. Вот и все! ЗЫ раньше я тоже все делал через require, но это не практично, ресурсоемко и получается, что ты просто вставляешь в скрипт кусок подключаемого файла. И я перешел на модули. Скорость реально увеличилась и стал заметен стиль программирования. Понятное дело, я не желею. |
| Автор: korob2001 26.6.2005, 15:12 |
| А я давно перешёл на классы. Правда require и use не одно и тоже. Если у тебя етсть большой файл, кторый разбит на много подпрограмм, которые выполняются в зависимости от действий пользователя. Допустим в одной из всех подпрограмм, тебе нужно подгрузить другой файл, то гораздо лучше использовать require, так как use не спрячешь от компилятора, даже если он будет внутри подпрограммы, т.е. модуль будет загружен даже если эта подпрограмма и не запускалась. |
| Автор: sharq 26.6.2005, 17:40 | ||
korob2001
Вопрос: зачем писать большие-большие скрипты, в которых легко запутаться и трудно отладить? Поэтому и пишут модули, в которых есть ряд функций, выполняющие опред. действия, их легко отладить и модифицировать, и несколько скриптов, которые используют те или иные модули. Хотя каждый делает так, как ему удобно. |
| Автор: rcdimon 26.6.2005, 19:48 |
| А как использовать use то? |
| Автор: korob2001 26.6.2005, 21:43 | ||||||||||
Вот так, это одно и тоже:
Лично мне гораздо проще и, главное, быстрее отладить один большой скрипт, чем много маленьких. А если уж разбивать на модули, то здесь я предпочитаю ООП. Хотя не могу с тобой не согласиться, каждый в праве писать так, как ему удобно.
Сначала пишешь модуль или класс, сохраняешь его в файл с рассширением .pm, имя должно соответствовать имени пакета. Затем кидаешь его в библиотечный каталог, если удоступа к такому каталогу у тебя нет, значит создаёшь отдельный каталог, и в каждом скрипте, который будет использовать твой модуль или класс, прописываешь такую строку:
Ну вот собственно и всё. Хотя если пишешь модуль не забудь об экспорте, если класс, не забудь о конструкторе. Если хочешь пример, то вот здесь можешь почитать о том, как создаются классы: http://forum.vingrad.ru/index.php?showtopic=43392 а здесь увидеть, как примерно пишется модуль: http://forum.vingrad.ru/index.php?showtopic=55677 Если возникнут конкретные вопросы, пиши. |
| Автор: sharq 27.6.2005, 09:58 | ||||||||||
korob2001
Да, согласен, есть ряд задач, когдалучше использовать объекты, но не всегда.
Это, конечно, хорошо, но крайне неудобно при переносе скрипта, каждый раз менять... imho, лучше модули хранить в той же директории, что и скрипт, подключающий их или, на крайняк, импортировать модуль в вызвавший пакет. Например, есть основной скрипт проекта index.cgi и директория MyModule, в которой находятся несколько модулей, которые используются в скрипте, например - MySub.pm. MySub.pm
Тогда index.cgi подключает такие модули как обычные модули:
Давно нашет такое решение на http://dklab.ru. Впредь им пользуюсь.
это не обязательно... |
| Автор: korob2001 27.6.2005, 18:54 | ||
Но желательно. |