Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хочу функции вынести из "главного" файла. разбить программу на подпрограммы 
:(
    Опции темы
Кнером
Дата 28.5.2006, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Уважаемые, подскажите пожалуйста, как программу разбить на
несколько подпрограмм. Чтобы к примеру все функции по чтению
файла были в одном файле, по редактированию в другом и т.д.
Хочу функции вынести из "главного" файла.

Как я понимаю, в главной программе должно быть что-то вроде use MYFUNC;
В теле программы сам фызов функции. К примеру, myfunc_read();
А в подпрограмме должно быть уже тело самой функции.
myfunc_read() { print "Ok!"; }

Добавлено @ 18:30 
Если можно пример.  ;-) 
PM MAIL WWW ICQ   Вверх
shootnix
Дата 28.5.2006, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 3.9.2005
Где: Казахстан

Репутация: 2
Всего: 2



Создаёшь пакадж такого вида:

Код

package hello;

use strict;

sub hello {
    my $name = shift;
    print "Hello, $name!";
}

1;


Теперь в главной программе подключаешь пакадж так:

Код

require "hello.pl";

hello('Alex');


 
PM WWW ICQ   Вверх
Кнером
Дата 29.5.2006, 05:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Выдает ошибку Undefined subroutine &main::hello called at \home\mb.ru\cgi-bin\m.pl line 9. 
PM MAIL WWW ICQ   Вверх
shootnix
Дата 29.5.2006, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 3.9.2005
Где: Казахстан

Репутация: 2
Всего: 2



ага, бывает smile Имя пакаджа нужно указывать перед вызовом функции, вот так:

Код

hello::hello('alex');


Можно ещё сделать модуль (это порой бывает удобнее). Для этого имя пакаджа должно совпадать с именем файла и иметь расширение .pm
Код

package hello;

BEGIN  {
    use Exporter(); 
    @ISA = qw(Exporter); 
    @EXPORT = qw(&hello_sub); 
}

sub hello_sub {
    print "Hello!\n";
}

return 1;

END { }

 
В массив @EXPORT вносятся те функции, которые должны быть доступны в основной программе по умолчанию при загрузки модуля. После этого модуль используется таким образом:

Код

use hello;

hello_sub();

т.е. имя пакета указывать не нужно, но ничего страшнго не будет, если напишешь так:
Код

use hello;

hello::hello_sub();
 

Это сообщение отредактировал(а) shootnix - 29.5.2006, 21:12
PM WWW ICQ   Вверх
Кнером
Дата 9.6.2006, 03:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



shootnix, с внесенным изменением hello::hello('alex'); заработал первый вариант.
На второй вариант ругается.
Цитата
Can't locate Exporter.pm in @INC (@INC contains: .) at hello.pm line 3.

Как я понимаю, не установлен данный модуль. Exporter.pm входит в стандартный пакет или его
нужно скачивать отдельно? Чувствую, что должен входить в стандартный набор.
Почему так же ругается на use strict;. Интерпретатор был скачен с ActiveState.

Цитата(shootnix @  29.5.2006,  16:04 Найти цитируемый пост)
Можно ещё сделать модуль (это порой бывает удобнее).

Т.е. пакадж и модуль это разное? Я изначально хотел модуль. Так как не знал, что существую
некие "пакаджы". В книге по Perl это написано или только в интернете об этом можно узанать?
Просто у меня на руках книга: "Освой самостоятельно Perl за 24 часа".  smile 

Второй вариант нравится больше. А то писать/копировать название пакета утомительно и лениво.
Зачем проделывать лишнюю работу...

P.S. Не сразу заметил ответа, так как не был подписан на тему. Благодарю за быстрый и полный ответ! 
PM MAIL WWW ICQ   Вверх
Кнером
Дата 14.6.2006, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



shootnix, спасибо, все работает так как надо!  smile 

+  smile  
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0657 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.