- RU.PERL ----------------------------------------------------------- RU.PERL - Msg : #4061 [671] От : Artem Chuprina 2:5020/400 12 июля 04, 15:50 Кому : Anton Potekhin 14 июля 04, 22:51 Тема : Re: проблема ------------------------------------------------------------------------------- From: Artem ChuprinaAnton Potekhin -> All @ Mon, 12 Jul 2004 08:49:06 +0000 (UTC): AP> Hello, All! AP> такая проблема AP> в цикле вызываю конструктор для объектов своего класса созданные объекты AP> запихиваю в массив AP> потом оказывается что все элементы массива соответсвуют последнему AP> созденному в цикле объекту AP> примерно это выглядит так AP> my @array; AP> my $i=0; AP> while ($var ne false) { AP> $array[$i] = CObject->new(someSub($var)); AP> $i++; AP> } AP> foreach $element(@array) { AP> $element->someMethod(); AP> } AP> оказывается что все элементы в массиве одинаковые хотя клал я туда совсем AP> разные вещи AP> я примерно догадываюсь что new наверное возвращает ссылку на область AP> памяти и по каким-то причинам все время на одну и ту же AP> при использовании конструкции AP> @array = (CObject->new(1), CObject->new(2)); AP> получается та же хрень AP> может дело в конструкторе AP> вот его исходник: AP> sub new($) { AP> my $self = {}; AP> my $class = shift; AP> $url = shift; AP> $url =~ s/\/$//gi; AP> parsingHTML(); AP> return (bless($self, $class)); AP> } Судя по коду конструктора, объекты-то каждый раз возвращаются разные. Для надежности проверки на это место сделай так: print join(" ", map("$_", @array)), "\n"; Если у тебя для этого класса stringify не определен, оно выведет тебе адреса, по которым они размещены. Если они разные - значит, объекты-то разные. А вот внутреннее состояние у них теоретически может оказаться и одинаковым - а именно, должно бы оказываться пустым хэшом, судя по коду конструктора. Если же ты пытаешься в parsingHTML() заполнять $self, не передав его туда - последствия за свой счет... -- Artem Chuprina RFC2822: , FIDO: 2:5020/122.256, ICQ: 13038757 --- ifmail v.2.15dev5.3 * Origin: Leninsky 45 home network (2:5020/400)