|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Alexander Orlovsky 2:5020/400 17 Mar 2003 14:18:11 To : Artem Chuprina Subject : Re: ссылка из package -------------------------------------------------------------------------------- On Mon, 17 Mar 2003 09:34:34 +0000 (UTC), Artem Chuprina <ran@wizzle.ran.pp.ru> wrote: >Здравствуй, Alexander Orlovsky. > > >AO> Это.. у меня такая колбаса.. (извиняюсь) > >AO> В модуле MyMod есть пакет >AO> MyPakName (MyMod eq PakName - в моем случае) >AO> в нем объявил ссылку на анонимный массив: >AO> $MYREF = ["1","2","3"]; > >AO> В основной программе: > >AO> use MyMod; >AO> подставляю в параметр одной функции, в которой один из параметров ссылка >AO> на массив > >AO> func ( $MyPakName::MYREF ); > >AO> И это не фурычит :( >AO> А если локально объявить эту же ссылку, то работает.. > >А она у тебя как my объявлена или как our? Объявлена как my, но я ведь к ней "напрямую обращаюсь" через имя_пакета::имя_переменной Я почему-то думал, что так мне должно вернуться "правильное" значения, а опровержения этому я не читал вроде... Хотя, сейчас в camel book заглянул: "Более правильным способом доступа к глобальным переменным, особенно из программ и модулей с объявлением use strict, является объявление our<...> в отличие от лексической области видимости my<...> обеспечивает доступ к глобальной переменной в текущем пакете, маскируя одноименные лексические пременные, которые в противном случае закрыли бы от вас эту глобальную переменную. В этом отношении переменные our действуют точно так же, как переменные my." Дык, у меня же нет одноименных локальных переменных! (в предыдущий пример не смотрите, т.к. объявление лок. переменной уже убрал - т.к. там я "ступил") Так почему я не могу обратиться к ссылке подобным образом: $имя_пакета::имя_переменной? Чем это объясняется? Втолкуйте, плиз. Я понял, что это потому, что я ее вызываю из своей функции (т.е. из след. "уровня вложенности" лекс. видимости ) Так что же "закрыло" мне мою глобальную переменную? Ведь в более "верхнем" уровне, т.е. при обращении не из функции - подобная ссылка ($имя_пакета::имя_переменной) работает... Кста, объявил our - заработало. Стопудово, "что-то" перекрывает.. :) --- ifmail v.2.15dev5 * Origin: Ye 'Ol Disorganized NNTPCache groupie (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/208036c93788.html, оценка из 5, голосов 50
|