|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Serg Chervjakov 2:5020/400 11 Jun 2003 00:34:28 To : All Subject : Зачем так получается? -------------------------------------------------------------------------------- Hi All, Пишу класс, условно prob.pm: ----- prob.pm ----- package prob; sub new { my $class=@_; my $object={}; bless($object,$class); return $object; } sub ph { print 'ok' if ($alr!=1); $alr=1; } 1; -------- А теперь юзаю его: ---- use prob; $obj=prob->new(); $obj->ph; $obj->ph; ---- 'ok' принтится лишь один раз. Это понятно - глобальные переменные сохраняют свое значение (тут это $alr). Так и должно быть (причем эти глобальные переменные, как и полагается, видны лишь в пределах класса). Hо вот облом наступает когда делается так: ---- use prob; $obj=prob->new(); $obj->ph; $obj1=prob->new(); $obj1->ph; ---- 'ok' опять принтится лишь 1 раз. Hо вот почему? Ведь $obj и $obj1 по идее не должны быть связаны между собой - они независимые друг от друга экземпляры класса. А они связаны по рукам и ногам. Мораль - как бы то нибыло, но лучше глобальных переменных не юзать... чревато это... От этого можно как-нибудь избавиться? Кста, а почему так получается? Сорри, что немного громоздко, хотя вроде и создавались наипростейшие примеры... --- ifmail v.2.15dev5 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/16679948b5852.html, оценка из 5, голосов 10
|