|
|
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
|