my @array;
my $i=0;
while ($var ne false) {
$array[$i] = CObject->new(someSub($var));
+ $i++
}
создание объектов классов
в цикле вызываю конструктор для объектов своего класса созданные объекты запихиваю в массив
потом оказывается что все элементы массива соответсвуют последнему созденному в цикле объекту
примерно это выглядит так
my @array;
my $i=0;
while ($var ne false) {
$array[$i] = CObject->new(someSub($var));
}
foreach $element(@array) {
$element->someMethod();
}
оказывается что все элементы в массиве одинаковые хотя клал я туда совсем разные вещи
я примерно догадываюсь что new наверное возвращает ссылку на область памяти и по каким-то причинам все время на одну и ту же
при использовании конструкции
@array = (CObject->new(1), CObject->new(2));
получается та же хрень
может дело в конструкторе
вот его исходник:
sub new($) {
my $self = {};
my $class = shift;
$url = shift;
$url =~ s/\/$//gi;
parsingHTML();
return (bless($self, $class));
}
Код:
Цитата:
Originally posted by ReDrum
Код:
my @array;
my $i=0;
while ($var ne false) {
$array[$i] = CObject->new(someSub($var));
+ $i++
}
my $i=0;
while ($var ne false) {
$array[$i] = CObject->new(someSub($var));
+ $i++
}
ssorry я просто забыл $i++ дописать в примере здесь а у меня она стоит но все равно не работает
дело в том что new возвращает ссылку на объект
и в массив я записываю ссылку
но new все время возвращает одну и ту же ссылку
и все элементы массива ссылаются на один и тот же кусок памяти
как с этим бороться
1. Вот наши бананы.
Соттветвственно видим, что используются разные участки памяти. Но поля объекта не заданы.
Код:
use strict;
my @array = ();
for (0 .. 5) {
$array[$_] = Test->new('http://test.org/');
}
use Data::Dumper;
print Dumper(\@array);
print @array;
package Test;
sub new($) {
my $self = {};
my $class = shift;
my $url = shift;
$url =~ s/\/$//gi;
parsingHTML();
return (bless($self, $class));
}
sub parsingHTML {
}
my @array = ();
for (0 .. 5) {
$array[$_] = Test->new('http://test.org/');
}
use Data::Dumper;
print Dumper(\@array);
print @array;
package Test;
sub new($) {
my $self = {};
my $class = shift;
my $url = shift;
$url =~ s/\/$//gi;
parsingHTML();
return (bless($self, $class));
}
sub parsingHTML {
}
2. murat рекомендую ознакомится с perldoc perldebtut и perldoc perldebug
Цитата:
Originally posted by ReDrum
Нет дело видимо в чем то ином ;)=
1. Вот наши бананы.
Соттветвственно видим, что используются разные участки памяти. Но поля объекта не заданы.
2. murat рекомендую ознакомится с perldoc perldebtut и perldoc perldebug
Нет дело видимо в чем то ином ;)=
1. Вот наши бананы.
Соттветвственно видим, что используются разные участки памяти. Но поля объекта не заданы.
Код:
use strict;
my @array = ();
for (0 .. 5) {
$array[$_] = Test->new('http://test.org/');
}
use Data::Dumper;
print Dumper(\@array);
print @array;
package Test;
sub new($) {
my $self = {};
my $class = shift;
my $url = shift;
$url =~ s/\/$//gi;
parsingHTML();
return (bless($self, $class));
}
sub parsingHTML {
}
my @array = ();
for (0 .. 5) {
$array[$_] = Test->new('http://test.org/');
}
use Data::Dumper;
print Dumper(\@array);
print @array;
package Test;
sub new($) {
my $self = {};
my $class = shift;
my $url = shift;
$url =~ s/\/$//gi;
parsingHTML();
return (bless($self, $class));
}
sub parsingHTML {
}
2. murat рекомендую ознакомится с perldoc perldebtut и perldoc perldebug
БООЛЬШОЕ спасибо за совет 2
теперь кажися все работает