Forum Webscript.Ru

Программирование => Perl => Тема начата: Timofey от 22 Апреля 2004, 10:09:43

Название: создание библиотеки с подпрограммами
Отправлено: Timofey от 22 Апреля 2004, 10:09:43
подскажите как лучше и правильно релизовать следующее
есть целый набор подпрограмм,которые вызываются с разными параметрами, как мне вынести все эти подрограммы в отдельный файл и потом просто от туда их дергать?
Название: создание библиотеки с подпрограммами
Отправлено: commander от 22 Апреля 2004, 10:14:41
в чем проблемма? запихиваешь их в отдельный файл... потом в скрипте его подключаешь:
-------------------
use lib \'.\';
use mydll.pl;
или
require "mydll.pl";

и пользуешся... :)
Название: создание библиотеки с подпрограммами
Отправлено: Timofey от 22 Апреля 2004, 10:29:27
а в чем разница?
Название: создание библиотеки с подпрограммами
Отправлено: commander от 22 Апреля 2004, 10:40:48
Timofey
Цитировать
а в чем разница?

лучше не задавай столь провакационные вопросы... :) Дискусии по этому вопросу на моей памяти доходити до 10 станиц... Народ с пеной у рта спорил по этому вопросу и все остались при своем мнении... :) просто юзай что больше нравиться...
Название: создание библиотеки с подпрограммами
Отправлено: Chs от 22 Апреля 2004, 10:41:51
perldoc perlmod
Название: создание библиотеки с подпрограммами
Отправлено: commander от 22 Апреля 2004, 10:52:47
да и ещё когда будешь создавать файл с подпрограммами не забудь:
mydll.pl
-------------------
sub my_sub
{
print "GO+";
}
1;  #вот ето.... Все файлы включения должны возращать значиние истены...
-------------------
Название: создание библиотеки с подпрограммами
Отправлено: Timofey от 22 Апреля 2004, 11:27:34
т.е. есть у меня

main.pl
--------
#!/usr/bin/perl
# index

use DBI;
use CGI qw/:standard/;
use vars qw(%form);

require \'main_sub.pl\';

print "Content-Type: text/html\\n\\n";

pack1::convert_param();
pack1::date_format();
.....

и есть main_sub.pl
--------------
package pack1;

BEGIN {}
sub convert_param()
 {
  .............
 }
sub date_format()
 {
  ............
 }
return 1;
END{}

запарно перед каждым вызовом подрограммы подставлять имя пакета pack1::convert_param(); и т.п. это можно обойти?
Название: создание библиотеки с подпрограммами
Отправлено: commander от 22 Апреля 2004, 11:59:10
ну можешь без пакетов юзать... просто подпрограммы...
Название: создание библиотеки с подпрограммами
Отправлено: NeoNox от 22 Апреля 2004, 12:01:43
Цитировать
Timofey:
запарно перед каждым вызовом подрограммы подставлять имя пакета pack1::convert_param(); и т.п. это можно обойти?

можно.
perldoc perlmod
Название: создание библиотеки с подпрограммами
Отправлено: Timofey от 22 Апреля 2004, 16:08:11
require \'templates/maintemp.pl\'; -работает
как в use указать путь к библиотеки

use \'templates/maintemp.pl\'; -не работает
Название: создание библиотеки с подпрограммами
Отправлено: NeoNox от 22 Апреля 2004, 16:12:53
Есть два варианта:
1. Я читаю тебе вслух и с выражением perldoc.
За это ты мне платиш 50$ в час.

2. Читать до того как сам не поймеш насколько неверен твой вопрос:
http://wdh.suncloud.ru/perl07.htm
Название: создание библиотеки с подпрограммами
Отправлено: Mog. от 22 Апреля 2004, 16:52:14
Цитировать
NeoNox:
1. Я читаю тебе вслух и с выражением perldoc.
За это ты мне платиш 50$ в час.

С выездом к клиенту? :)


[OFF]В "цитаты..." отправил[/OFF]
Название: создание библиотеки с подпрограммами
Отправлено: commander от 22 Апреля 2004, 17:10:38
3. Юзаешь require...
:)
Название: создание библиотеки с подпрограммами
Отправлено: NeoNox от 22 Апреля 2004, 17:20:42
Mog. этой шутке уже лет 10, если не больше.
В оригинале звучит как:
\'Чтение документации вслух с выражением - $50/час.\'
commander не нужно require.
Лучше неделю на ОО и пакеты убить, зато потом можно двойное жалование на работе просить.
Название: создание библиотеки с подпрограммами
Отправлено: commander от 22 Апреля 2004, 17:32:10
NeoNox
:) "лучше пол дня потерять потом за час долететь..."
"Крылья, ноги.... Главное хвост!"
:)
Название: создание библиотеки с подпрограммами
Отправлено: commander от 22 Апреля 2004, 17:48:31
Как писал в своё время Кевин Мельтцер:

------------------------------------------------------------
Многим людям не нравиться функция require(). Они предпочли бы, чтобы все файлы, загружались как модули функцией use(). Я же считаю что require() быстрее и проще, и, если Лари оставит эту функцию в языке, я буду её применять.
------------------------------------------------------------

Я придерживаюсь такого же мнения...
Название: создание библиотеки с подпрограммами
Отправлено: NeoNox от 22 Апреля 2004, 18:15:14
commander Фигню написал Кевин Мельтцер. Это не одно и тоже.
Ты действительно не понимаеш чем отличаются use и require и никогда не слышал о ОО программировании на perl?
Название: создание библиотеки с подпрограммами
Отправлено: commander от 22 Апреля 2004, 18:42:26
NeoNox
Ваши сомнения мне совершенно не понятны...
Я имел в ввиду несколько другое... Если это простенькие подпрограммы, а судя по вопросу они врятли могут быть сложными... то намного быстрее и проще использовать require...
Название: создание библиотеки с подпрограммами
Отправлено: commander от 22 Апреля 2004, 18:44:37
perldoc perlbot :)
Название: создание библиотеки с подпрограммами
Отправлено: NeoNox от 22 Апреля 2004, 18:55:12
Цитировать
commander:
Ваши сомнения мне совершенно не понятны...

Сомнения относительно чего?
perldoc perlmod:

Цитировать

           require Cwd;                # make Cwd:: accessible
           $here = Cwd::getcwd();

           use Cwd;                    # import names from Cwd::
           $here = getcwd();

           require Cwd;                # make Cwd:: accessible
           $here = getcwd();           # oops! no main::getcwd()

       In general, "use Module ()" is recommended over "require
       Module", because it determines module availability at comґ
       pile time, not in the middle of your program\'s execution.
Название: создание библиотеки с подпрограммами
Отправлено: commander от 22 Апреля 2004, 19:02:42
NeoNox
Вот примерно этого я и опасался...
Цитировать
лучше не задавай столь провакационные вопросы...  Дискусии по этому вопросу на моей памяти доходити до 10 станиц... Народ с пеной у рта спорил по этому вопросу и все остались при своем мнении...

мы будем долго дискутировать и я почти не сомневаюсь каждый останиться при своём мнении...
Название: создание библиотеки с подпрограммами
Отправлено: NeoNox от 22 Апреля 2004, 19:12:03
commander пока что я привел тебе выдержку из perldoc а ты мне высказывание Кевина Мельтцера (которое я не могу найти в оригинале).
Кстати, я ничего не имею против require (хотя за последние два-три года его не использовал вообще ни разу) а о том, что не стоит программисту зашориваться. Есть такой инструмент и его нужно знать досконально.
Название: создание библиотеки с подпрограммами
Отправлено: commander от 22 Апреля 2004, 19:17:33
Цитировать
Есть такой инструмент и его нужно знать досконально.

Подобное суждение должно иметь разумное ограничение... А то так можно умиреть серфя http://search.cpan.org/ в поисках новых инструментов... :) Ложка хороша к столу...
Название: создание библиотеки с подпрограммами
Отправлено: NeoNox от 22 Апреля 2004, 19:35:57
commander под инструментом я имел ввиду написание и использование модулей (пакетов). Называя CPAN, ты начинаеш рыть яму своей теории.
Я все еще не вижу доказательств почему я должен использовать require.
Название: создание библиотеки с подпрограммами
Отправлено: Chs от 22 Апреля 2004, 21:35:40
Ну давайте еще обсудим скрипты от Matt :)) там require очень показательно.:)

Приведу одно маленькое различие use и require - то, что написано с использованием модулей легко использовать повторно, а вот то, что вынесено в подпрограмму с использованием require - проблематично.:)

И, commander, не стоит спорить с двумя людьми имеющими большой опыт программирования не приводя аргументов.
Название: создание библиотеки с подпрограммами
Отправлено: commander от 23 Апреля 2004, 09:37:55
Я вообще не собирался спорить... более того я в самом начале топика это заявил... И я не призываю везде и всюду использовать require, а только там где, это проще чем использования use...
Кстати вопрос:
Как известно, в случае использования команды require подключение идет в момент выполнения сценария, а в случае использования use на этапе компиляции... Вопрос: В чем принцепиальное отличие этих двух видов подключения?
Название: создание библиотеки с подпрограммами
Отправлено: NeoNox от 23 Апреля 2004, 14:08:22
commander ты же сам себе и ответил :)
Или ты хочеш узнать где практическое применение подключения на этапе комиляции или в какой последовательности и зачем вызываются (и вообще существуют) "BEGIN", "CHECK", "INIT", и "END"?
Название: создание библиотеки с подпрограммами
Отправлено: commander от 23 Апреля 2004, 16:07:08
NeoNox
Вопрос звучал так:
В чем принцепиальное отличие этих двух видов подключения? Не больше не меньше... :)
Название: создание библиотеки с подпрограммами
Отправлено: Chs от 23 Апреля 2004, 16:27:57
perldoc perlmod до просветления...
Название: создание библиотеки с подпрограммами
Отправлено: Wyclef от 23 Апреля 2004, 21:07:49
commander
Цитировать
В чем принципиальное отличие этих двух видов подключения?


Если отсутствует подключаемый модуль, скрипт даже не запустится т.к. use не пройдет компиляцию. use выполняет неявное импортирование пакета включаемого модуля.