Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Видимость глобальной переменной в модулях (Кофни)
Author Message
Кофни
Заглянувший



Joined: 15 Aug 2009
Posts: 3
Карма: 0
   поощрить/наказать


PostPosted: Sat Aug 15, 2009 1:27 am (написано за 8 минут 7 секунд)
   Post subject: Видимость глобальной переменной в модулях
Reply with quote

Доброго времени суток.

Вопрос такой - каким образом сделать так, чтобы переменная была видна многим модулям?
Поясню на примере. Есть главный файл, именуется index.pl. В нём происходит следующее:
Code (perl): скопировать код в буфер обмена
#!/usr/bin/perl

use strict;
use warnings;

use lib './lib';

use CGI qw (www.perldoc.com/perl5.6/pod/func/qw.html)(:standard);
use CGI::Carp qw (www.perldoc.com/perl5.6/pod/func/qw.html)(fatalsToBrowser);
use CGI::Session;

#
use MyModule1;

our (www.perldoc.com/perl5.6/pod/func/our.html) $session = CGI::Session->load() || die (www.perldoc.com/perl5.6/pod/func/die.html)('Error loading session.');
our (www.perldoc.com/perl5.6/pod/func/our.html) $html    = new CGI;

#
my $content = MyModule1::create_content();

#
 
Мой модуль MyModule1 может включать ещё один модуль, которому тоже может понадобится $session. В общем, переменной нужно быть видимой сквозь несколько модулей.
Передавать как параметр метода мне кажется не совсем элегантным решением.

Искал решение в google, читал "кэмел", однако, всё равно пока плохо понимаю перловое ООП. Нужен совет опытных людей, спасибо.
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Sat Aug 15, 2009 1:44 am (спустя 16 минут; написано за 2 минуты 28 секунд)
   Post subject:
Reply with quote

есть три варианты:
1. создать еще один модуль, в котором объявить эту переменную, видимую "снаружи";
2. организовать так, чтобы можно было передавать функциям, процедурам и методам ссылку на эту переменную;
3. реорганизовать проект так, чтобы избавиться от необходимости передачи глобальной переменной.
Back to top
View user's profile Send private message
Кофни
Заглянувший



Joined: 15 Aug 2009
Posts: 3
Карма: 0
   поощрить/наказать


PostPosted: Sat Aug 15, 2009 1:05 pm (спустя 11 часов 21 минуту; написано за 1 минуту 48 секунд)
   Post subject:
Reply with quote

У меня был ещё такой способ:
Code (perl): скопировать код в буфер обмена
our (www.perldoc.com/perl5.6/pod/func/our.html) $session;
*session = *main::session;

# далее используем нужную переменную...
 
Только не уверен, что такой подход является правильным в ООП.
Но ваш первый вариант выглядит наиболее подходящим.
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Sat Aug 15, 2009 9:52 pm (спустя 8 часов 47 минут; написано за 51 секунду)
   Post subject:
Reply with quote

Кофни wrote:
ещё такой способ
Согласен. Забыл о нем.
Кофни wrote:
подход является правильным в ООП
Так вы уж выберите согласно вашей проблеме - "шашечки или ехать".
Back to top
View user's profile Send private message
Кофни
Заглянувший



Joined: 15 Aug 2009
Posts: 3
Карма: 0
   поощрить/наказать


PostPosted: Sat Aug 15, 2009 11:12 pm (спустя 1 час 19 минут; написано за 16 секунд)
   Post subject:
Reply with quote

Спасибо за советы, проблема решена.
Back to top
View user's profile Send private message
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6837
Карма: 131
   поощрить/наказать


PostPosted: Tue Jan 24, 2012 3:08 pm (спустя 2 года 5 месяцев 8 дней 15 часов 56 минут; написано за 47 секунд)
   Post subject:
Reply with quote

Кофни, задача решаемая, но неправильная. Так как потом запутаетесь. Переходите на ООП, и четко контролируйте переменные, которые вы передаёте и меняете.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You cannot download files in this forum.
XML