Доброго времени суток.
Возникла проблема.
При подключении модуля к основной программе не возникает проблем при использовании обьявляемых им (модулем) переменных и подпрограмм.
Но передать в модуль некоторые переменные основной программы не получается.
Точнее даже не передать а обеспечить доснуп к некоторым переменным.
Как это можно выполнить.
Заранее спасибо.
>Доброго времени суток.
>Возникла проблема.
>При подключении модуля к основной программе не возникает проблем при использовании обьявляемых
>им (модулем) переменных и подпрограмм.Своеобразная форма изложения.
>Но передать в модуль некоторые переменные основной программы не получается.
>Точнее даже не передать а обеспечить доснуп к некоторым переменным.
>Как это можно выполнить.передавай в качестве параметров методам.
>>Доброго времени суток.
>>Возникла проблема.
>>При подключении модуля к основной программе не возникает проблем при использовании обьявляемых
>>им (модулем) переменных и подпрограмм.
>
>Своеобразная форма изложения.
>
>>Но передать в модуль некоторые переменные основной программы не получается.
>>Точнее даже не передать а обеспечить доснуп к некоторым переменным.
>>Как это можно выполнить.
>
>передавай в качестве параметров методам.
К сожалению кол-во "общих" переменных слишком велико, что бы передавать его параметрами.Уже нашел решение.
package NNNNN;
*var_from_main=*main::var_from_main
..........
..........
sub dddd {
$var_from_main #имеем доступ
}
1;
>К сожалению кол-во "общих" переменных слишком велико, что бы передавать его параметрами.передавать в качестве указателя на хеш коструктору new(). При то что они "общие".
>Уже нашел решение.
это не решение, это костыль.
>package NNNNN;
>*var_from_main=*main::var_from_main
>..........
>..........
>sub dddd {
>$var_from_main #имеем доступ
>}
>1;пример, неверной декомпозиции на модули.
ps: ничего личного, но если требуется подобный изврат, то явно проблемы в архитектуре приложения. Не сочтите за оскорбление.
>>К сожалению кол-во "общих" переменных слишком велико, что бы передавать его параметрами.
>
>передавать в качестве указателя на хеш коструктору new(). При то что они
>"общие".
>
>>Уже нашел решение.
>
>это не решение, это костыль.
>
>>package NNNNN;
>>*var_from_main=*main::var_from_main
>>..........
>>..........
>>sub dddd {
>>$var_from_main #имеем доступ
>>}
>>1;
>
>пример, неверной декомпозиции на модули.
>
>ps: ничего личного, но если требуется подобный изврат, то явно проблемы в
>архитектуре приложения. Не сочтите за оскорбление.Не буду отрицать, приложение писалось мною относительно давно, когда работу с модулями я еще не постиг в необходимой мере.
Посему писал как мог. А теперь приходится перестраивать дом, не снося фундамент.
Если можно - буду очень признателен за ссылки на источники по правильному написанию модулей и вообще основам "ООП" на перл
>Если можно - буду очень признателен за ссылки на источники по правильному
>написанию модулей и вообще основам "ООП" на перлНачать стоит с находящихся под рукой:
perlmod Perl modules: how they work
perlmodlib Perl modules: how to write and use
perlmodstyle Perl modules: how to write modules with styleperlboot Perl OO tutorial for beginners
perltoot Perl OO tutorial, part 1
perltooc Perl OO tutorial, part 2и perlstyle
>>Если можно - буду очень признателен за ссылки на источники по правильному
>>написанию модулей и вообще основам "ООП" на перл
>
>Начать стоит с находящихся под рукой:
> perlmod
>
> Perl modules: how they work
> perlmodlib
> Perl modules:
>how to write and use
> perlmodstyle
> Perl modules: how to
>write modules with style
>
> perlboot
>
>Perl OO tutorial for beginners
> perltoot
>
>Perl OO tutorial, part 1
> perltooc
>
>Perl OO tutorial, part 2
>
>и perlstyle
Писал совсем недавно программу, разбитую на модули и подключаемые через use, так как в модулях хранились глобальные хэши и пара функций, заворачивать все это в ОО модель было просто лень (и с экспортом тоже не хотелось возится). Я работал так:myscrip.pl
------------------
#!/usr/bin/perluse DATA;# мой модуль
DATA::Prepare(args);# вызов функции из модуля.
print %DATA::RUTS;# вывод глобальной переменной определенной в модуле.
и т.п
-----------------
Модуль DATA.pm был примерно такой:
---------
package DATA;%DATA::RUTS=();
sub Prepare {
}
# ....
1;
__END__
Так что в вашем случае (перестройки дома) возможно лучше обойтись без ОО.