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

Как из модуля обратится к переменной, вызвавшего его скрипта (Um)
Author Message
Um
Заглянувший



Joined: 17 Dec 2003
Posts: 18
Карма: 0
   поощрить/наказать


PostPosted: Sun Jan 18, 2004 7:56 pm ()
   Post subject: Как из модуля обратится к переменной, вызвавшего его скрипта
Reply with quote

Как из модуля обратится к переменной, вызвавшего его скрипта?

Например cкрипт varible.cgi:
Code (perl): скопировать код в буфер обмена
use MyModule;

my $my_var = '    ';

print_my_var();
MyModule.pm
Code (perl): скопировать код в буфер обмена
package (www.perldoc.com/perl5.6/pod/func/package.html) MyModule;

use Exporter;

@ISA = "Exporter";
@EXPORT = "&print_my_var";

sub print_my_var() {
        print (www.perldoc.com/perl5.6/pod/func/print.html) $main::may_var #!!! Так не прет !?!?
}
и еще попутный вопрос если в модуле написать:
Code (perl): скопировать код в буфер обмена
use strict;
то он ругается на строчки
Code (perl): скопировать код в буфер обмена
@ISA = "Exporter";
@EXPORT = "&print_my_var";
приходится писать
Code (perl): скопировать код в буфер обмена
@Module::ISA = "Exporter";
@Module::EXPORT = "&print_my_var";
а, как павильно?
Back to top
View user's profile Send private message
Ant
Сотрудник «Лаборатории»



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


PostPosted: Sun Jan 18, 2004 8:13 pm (спустя 17 минут)
   Post subject:
Reply with quote

Константин Шилов wrote:
my $my_var = 'переменная к которой нужно обратится';
Как Вы думаете, что такое «my»?
Константин Шилов wrote:
print $main::may_var
Не «may_var», а «my_var».
Константин Шилов wrote:
а, как павильно?
TIMTOWTDI (-;
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Sun Jan 18, 2004 8:29 pm (спустя 15 минут)
   Post subject:
Reply with quote

Константин Шилов :
Почитайте-ка perlmod в документации ActivePerl. В таких вопросах нужно разбираться досконально, если Вы хотите программировать на Perl.

Вкратце ответы такие.
Константин Шилов wrote:
my $my_var
При этом не создается переменная $MyModule::my_var. Создается лексическая переменная, область видимости которой — охватывающий контекст (и только он). Нигде за пределами этого контекста (за пределами фигурных скобок, если они есть, в Вашем случае — за пределами файла модуля) она не видна в принципе.
Константин Шилов wrote:
@ISA = "Exporter";
Нужно писать
Code (perl): скопировать код в буфер обмена
our (www.perldoc.com/perl5.6/pod/func/our.html) @ISA = "Exporter";
our (www.perldoc.com/perl5.6/pod/func/our.html) @EXPORT = (...);
А еще лучше — вообще так:
Code (perl): скопировать код в буфер обмена
use base Exporter;
# и все, без всяких @ISA
 
Константин Шилов wrote:
Как из модуля обратится к переменной, вызвавшего его скрипта?
Доступ к глобальной переменной с указанным именем, расположенной в вызывающем пакете.
Code (perl): скопировать код в буфер обмена
sub subInModule {
  my $caller_module = caller (www.perldoc.com/perl5.6/pod/func/caller.html);
  my $var_name = "my_var";
  no (www.perldoc.com/perl5.6/pod/func/no.html) strict;
  print (www.perldoc.com/perl5.6/pod/func/print.html) ${"$caller_module\::$var_name"};
}
А вообще, см. исходники модуля Exporter для примеров.
Back to top
View user's profile Send private message Send e-mail
Enilatiar
Участник форума



Joined: 09 Jun 2003
Posts: 690
Карма: 24
   поощрить/наказать


PostPosted: Mon Jan 19, 2004 10:18 am (спустя 13 часов 48 минут)
   Post subject:
Reply with quote

Константин Шилов wrote:
Как из модуля обратится к переменной, вызвавшего его скрипта?
А вообще, Вы о чем спрашиваете? Зачем Вам переменная внешняя для модуля? А уж не закралась ли ошибка в архитектуру Вашей программки?
Code (perl): скопировать код в буфер обмена
use MyModule;
my $my_var = 'переменная к которой нужно обратится';

print_my_var($my_var);

#=============================
MyModule.pm
#=============================
package (www.perldoc.com/perl5.6/pod/func/package.html) MyModule;

...

sub print_my_var() {
    my $may_var = shift (www.perldoc.com/perl5.6/pod/func/shift.html);
    print (www.perldoc.com/perl5.6/pod/func/print.html) $may_var; # Так прет!
}
Back to top
View user's profile Send private message
Um
Заглянувший



Joined: 17 Dec 2003
Posts: 18
Карма: 0
   поощрить/наказать


PostPosted: Wed Jan 21, 2004 3:01 pm (спустя 2 дня 4 часа 42 минуты)
   Post subject:
Reply with quote

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



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


PostPosted: Wed Jan 21, 2004 6:12 pm (спустя 3 часа 11 минут)
   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   This topic is locked: you cannot edit posts or make replies. 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