Форум программистов, компьютерный форум, киберфорум
Наши страницы
Perl
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
TheAthlete
158 / 158 / 16
Регистрация: 31.08.2010
Сообщений: 549
1

Ошибка при использовании слабых ссылок для создания и удаления объектов

18.07.2013, 17:55. Просмотров 1105. Ответов 2
Метки нет (Все метки)

Здравствуйте!
Изучаю ООП в Perl, дошел до главы 13. Уничтожение объектов книги "Шварц Р., Фой Б., Феникс Т. - Perl. Изучаем глубже. 2-е издание", но вот почему-то выдает ошибку при использовании слабых ссылок для создания и удаления объектов:

Пример

Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/usb/bin/perl -w
use Modern::Perl;
#use utf8::all;
use utf8;
 
binmode(STDOUT, ':utf8');
 
{ package Animal;
    use Carp 'croak';
    use File::Temp 'tempfile';
    use Scalar::Util 'weaken';
 
    our %REGISTRY;
 
    ## конструкторы
    sub named {
      ref(my $class = shift) and croak " требуется имя класса";
      my $name = shift;
      my $self = { Name => $name, Color => $class->default_color };
 
      my ($fh, $filename) = tempfile();
      $self->{temp_fh} = $fh;
      $self->{temp_filename} = $filename;
 
      bless $self, $class;
      $REGISTRY{$self} = $self; # возвращает $self
      weaken $REGISTRY{$self};
      $self;
    }
 
    sub registered {
      return map { 'экземлпяр ' . ref($_) . ' с именем ' . $_->name } values %REGISTRY;
    }
 
    sub DESTROY {
      my $self = shift;
      my $fh = $self->{temp_fh};
      close $fh;
      unlink $self->{temp_filename};
      say '[объект ' . $self->name . ' уничтожен.]';
    }
 
    ## заглушки (дожны быть перекрыты)
    sub default_color { 'коричневый' }
    sub sound { croak 'подкласс должен объявлять метод sound' }
 
    # методы классов/экземпляров
    sub speak {
      my $either = shift;
      say $either->name . ": " . $either->sound . "!";
    }
    sub name {
      my $either = shift;
      #$self->{Name};
      ref $either
        ? $either->{Name} # это экземпляр класса - вернуть кличку
        : "$either без имени"; # это класс
    }
    sub color {
      my $either = shift;
      ref $either
        ? $either->{Color} # это экземпляр класса - вернуть заданный цвет
        : $either->default_color; # это класс - вернуть цвет по-умолчанию
    }
    sub eat {
      my $either = shift;
      my $food = shift;
      say $either->name . " ест $food";
    }
 
    ## методы экземпляров
    sub set_name {
      ref(my $self = shift) or croak "требуется ссылка на экземпляр класса";
      $self->{Name} = shift;
    }
    sub set_color {
      ref(my $self = shift) or croak "требуется ссылка на экземпляр класса";
      $self->{Color} = shift;
    }
 
}
 
{ package Horse;
    our @ISA = qw/Animal/;
    sub sound { "иго-го" }
    sub DESTROY {
      my $self = shift;
      $self->SUPER::DESTROY;
      say '[' . $self->name . ' отправлен на фабрику для переработки.]';
    }
}
 
{ package RaceHorse;
    our @ISA = qw/Horse/;
    ## перекрыть и расширить родительский конструктор
    sub named {
      my $self = shift->SUPER::named(@_);
      $self->{$_} = 0 for qw/первых вторых третьих ни_одного/;
      $self;
    }
    sub won    { ++shift->{'первых'} }
    sub placed { ++shift->{'вторых'} }
    sub showed { ++shift->{'третьих'} }
    sub lost   { ++shift->{'ни_одного'} }
    sub standings {
      my $self = shift;
      join ', ', map " $_: $self->{$_}", qw/первых вторых третьих ни_одного/;
    }
}
 
{ package Sheep;
    our @ISA = qw/Animal/;
    sub sound { "бе-е-е-е" } # никакого "Молчания ягнят"
    sub default_color { 'белый' } # перекрыть цвет по умолчанию
}
 
{ package Cow;
    our @ISA = qw/Animal/;
    sub sound { "му-у-у-у" }
}
 
my @horses = map Horse->named($_), ('Триггер', 'мистер Эд');
say "Список животных перед входом в блок:\n", map("  $_\n", Animal->registered);
{
  my @cows = map Cow->named($_), qw/Бесси Гвен/;
  my @racehorses = RaceHorse->named('Билли Бой');
  say "Список животных внутри блока: \n" , map("  $_\n", Animal->registered);
}
say "Список животных, оставшихся в живых по выходе из блока: \n" , map("  $_\n", Animal->registered);
say 'Конец программы.';
Вывод программы:

Код
Список животных перед входом в блок:
  экземлпяр Horse с именем мистер Эд
  экземлпяр Horse с именем Триггер

Список животных внутри блока: 
  экземлпяр Horse с именем мистер Эд
  экземлпяр Horse с именем Триггер
  экземлпяр Cow с именем Бесси
  экземлпяр RaceHorse с именем Билли Бой
  экземлпяр Cow с именем Гвен

[объект Билли Бой уничтожен.]
[Билли Бой отправлен на фабрику для переработки.]
[объект Гвен уничтожен.]
[объект Бесси уничтожен.]
Can't call method "name" on an undefined value at ex_02.pl line 32.
[объект мистер Эд уничтожен.]
[мистер Эд отправлен на фабрику для переработки.]
[объект Триггер уничтожен.]
[Триггер отправлен на фабрику для переработки.]
Другими словами, Perl каким-то образом удалил значение из хэша %REGISTRY. Подскажите пожайлуста, в чем проблема?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2013, 17:55
Ответы с готовыми решениями:

Ошибка в использовании объектов класса
Здравствуйте. У меня есть упрощённый код прог., которая не работает: #include <iostream> class...

Как передавать данные при использовании ссылок?
Nikak ne mogu razobratsa, kak mozhno peredat danniye pri ispolzovnii sskilok.... Na odnoy stranitse...

Подгрузка ссылок из файла при использовании ParallelCurl
Всем доброго времени суток! Использую библиотку ParallelCurl...

Ошибка при использовании for_each для вектора
Здравствуйте, форумчане,при компиляции возникает ошибка: c:\program files\microsoft visual...

Ошибка при использовании erase для std::vector
Почему в случае удаления элемента из вектора с помощью передачи итератора в erase, который...

2
pka
351 / 221 / 25
Регистрация: 30.09.2012
Сообщений: 548
18.07.2013, 21:19 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Немного переписал программку под имеющийся пк, но основной смысл тот-же, и ошибка сохранилась
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!perl -w
 
use strict;
 
{ package Animal;
    use Carp 'croak';
    use File::Temp 'tempfile';
    use Scalar::Util 'weaken';
    use Data::Dumper;
 
    our %REGISTRY;
 
    ## конструкторы
    sub named {
      ref(my $class = shift) and croak " требуется имя класса";
      my $name = shift;
      my $self = { Name => $name, Color => $class->default_color };
      
      my ($fh, $filename) = tempfile();
      $self->{temp_fh} = $fh;
      $self->{temp_filename} = $filename;
      
      bless $self, $class;
      $REGISTRY{$self} = $self; # возвращает $self
      weaken $REGISTRY{$self};
      $self;
    }
 
    sub registered {
      print Dumper(\%REGISTRY);
      return map { 'экземлпяр ' . ref($_) . ' с именем ' . $_->name } values %REGISTRY;
    }
 
    sub DESTROY {
      my $self = shift;
      my $fh = $self->{temp_fh};
      close $fh;
      unlink $self->{temp_filename};
      print '[объект ' . $self->name . ' уничтожен.]' . "\n";
    }
 
    ## заглушки (дожны быть перекрыты)
    sub default_color { 'коричневый' }
    sub sound { croak 'подкласс должен объявлять метод sound' }
 
    # методы классов/экземпляров
    sub speak {
      my $either = shift;
      print $either->name . ": " . $either->sound . "!\n";
    }
    sub name {
      my $either = shift;
      #$self->{Name};
      ref $either
        ? $either->{Name} # это экземпляр класса - вернуть кличку
        : "$either без имени"; # это класс
    }
    sub color {
      my $either = shift;
      ref $either
        ? $either->{Color} # это экземпляр класса - вернуть заданный цвет
        : $either->default_color; # это класс - вернуть цвет по-умолчанию
    }
    sub eat {
      my $either = shift;
      my $food = shift;
      print $either->name . " ест $food\n";
    }
 
    ## методы экземпляров
    sub set_name {
      ref(my $self = shift) or croak "требуется ссылка на экземпляр класса";
      $self->{Name} = shift;
    }
    sub set_color {
      ref(my $self = shift) or croak "требуется ссылка на экземпляр класса";
      $self->{Color} = shift;
    }
 
}
 
{ package Horse;
    our @ISA = qw/Animal/;
    sub sound { "иго-го" }
    sub DESTROY {
      my $self = shift;
      $self->SUPER::DESTROY;
      print '[' . $self->name . ' отправлен на фабрику для переработки.]' . "\n";
    }
}
 
{ package RaceHorse;
    our @ISA = qw/Horse/;
    ## перекрыть и расширить родительский конструктор
    sub named {
      my $self = shift->SUPER::named(@_);
      $self->{$_} = 0 for qw/первых вторых третьих ни_одного/;
      $self;
    }
    sub won    { ++shift->{'первых'} }
    sub placed { ++shift->{'вторых'} }
    sub showed { ++shift->{'третьих'} }
    sub lost   { ++shift->{'ни_одного'} }
    sub standings {
      my $self = shift;
      join ', ', map " $_: $self->{$_}", qw/первых вторых третьих ни_одного/;
    }
}
 
{ package Sheep;
    our @ISA = qw/Animal/;
    sub sound { "бе-е-е-е" } # никакого "Молчания ягнят"
    sub default_color { 'белый' } # перекрыть цвет по умолчанию
}
 
{ package Cow;
    our @ISA = qw/Animal/;
    sub sound { "му-у-у-у" }
}
 
my @horses = map Horse->named($_), ('Триггер', 'мистер Эд');
print "Список животных перед входом в блок:\n", map("  $_\n", Animal->registered);
{
  my @cows = map Cow->named($_), qw/Бесси Гвен/;
  my @racehorses = RaceHorse->named('Билли Бой');
  print "Список животных внутри блока: \n" , map("  $_\n", Animal->registered);
}
print "Список животных, оставшихся в живых по выходе из блока: \n" , map("  $_\n", Animal->registered);
print 'Конец программы.';
Добавил в метод registered распечатку дампа хэша %REGISTRY. Вот что получилось:
Код
$VAR1 = {
          'Horse=HASH(0x2821b78)' => bless( {
                                              'temp_filename' => 'C:\\Users\\ZdesBilUser\\AppData\\Local\\Temp\

\Ay0vzB9zoW',
                                              'temp_fh' => \*{'File::Temp::$fh'},
                                              'Name' => 'мистер Эд',
                                              'Color' => 'коричневый'
                                            }, 'Horse' ),
          'Horse=HASH(0x28217a0)' => bless( {
                                              'temp_filename' => 'C:\\Users\\ZdesBilUser\\AppData\\Local\\Temp\

\G2LlOSA8so',
                                              'temp_fh' => \*{'File::Temp::$fh'},
                                              'Name' => 'Триггер',
                                              'Color' => 'коричневый'
                                            }, 'Horse' )
        };
Список животных перед входом в блок:
  экземлпяр Horse с именем мистер Эд
  экземлпяр Horse с именем Триггер
$VAR1 = {
          'Cow=HASH(0x2829a18)' => bless( {
                                            'temp_filename' => 'C:\\Users\\ZdesBilUser\\AppData\\Local\\Temp\

\QywiSFM7Sj',
                                            'temp_fh' => \*{'File::Temp::$fh'},
                                            'Name' => 'Бесси',
                                            'Color' => 'коричневый'
                                          }, 'Cow' ),
          'Horse=HASH(0x2821b78)' => bless( {
                                              'temp_filename' => 'C:\\Users\\ZdesBilUser\\AppData\\Local\\Temp\

\Ay0vzB9zoW',
                                              'temp_fh' => \*{'File::Temp::$fh'},
                                              'Name' => 'мистер Эд',
                                              'Color' => 'коричневый'
                                            }, 'Horse' ),
          'RaceHorse=HASH(0x2820fb8)' => bless( {
                                                  'ни_одного' => 0,
                                                  'вторых' => 0,
                                                  'temp_filename' => 'C:\\Users\\ZdesBilUser\\AppData\\Local\\Temp\

\N5uGAMvzlg',
                                                  'temp_fh' => \*{'File::Temp::$fh'},
                                                  'первых' => 0,
                                                  'третьих' => 0,
                                                  'Name' => 'Билли Бой',
                                                  'Color' => 'коричневый'
                                                }, 'RaceHorse' ),
          'Horse=HASH(0x28217a0)' => bless( {
                                              'temp_filename' => 'C:\\Users\\ZdesBilUser\\AppData\\Local\\Temp\

\G2LlOSA8so',
                                              'temp_fh' => \*{'File::Temp::$fh'},
                                              'Name' => 'Триггер',
                                              'Color' => 'коричневый'
                                            }, 'Horse' ),
          'Cow=HASH(0x25a05f0)' => bless( {
                                            'temp_filename' => 'C:\\Users\\ZdesBilUser\\AppData\\Local\\Temp\

\Jyi3benimC',
                                            'temp_fh' => \*{'File::Temp::$fh'},
                                            'Name' => 'Гвен',
                                            'Color' => 'коричневый'
                                          }, 'Cow' )
        };
Список животных внутри блока: 
  экземлпяр Cow с именем Бесси
  экземлпяр Horse с именем мистер Эд
  экземлпяр RaceHorse с именем Билли Бой
  экземлпяр Horse с именем Триггер
  экземлпяр Cow с именем Гвен
[объект Билли Бой уничтожен.]
[Билли Бой отправлен на фабрику для переработки.]
[объект Гвен уничтожен.]
[объект Бесси уничтожен.]
$VAR1 = {
          'Cow=HASH(0x2829a18)' => undef,
          'Horse=HASH(0x2821b78)' => bless( {
                                              'temp_filename' => 'C:\\Users\\ZdesBilUser\\AppData\\Local\\Temp\

\Ay0vzB9zoW',
                                              'temp_fh' => \*{'File::Temp::$fh'},
                                              'Name' => 'мистер Эд',
                                              'Color' => 'коричневый'
                                            }, 'Horse' ),
          'RaceHorse=HASH(0x2820fb8)' => undef,
          'Horse=HASH(0x28217a0)' => bless( {
                                              'temp_filename' => 'C:\\Users\\ZdesBilUser\\AppData\\Local\\Temp\

\G2LlOSA8so',
                                              'temp_fh' => \*{'File::Temp::$fh'},
                                              'Name' => 'Триггер',
                                              'Color' => 'коричневый'
                                            }, 'Horse' ),
          'Cow=HASH(0x25a05f0)' => undef
        };
[объект мистер Эд уничтожен.]
[мистер Эд отправлен на фабрику для переработки.]
[объект Триггер уничтожен.]
[Триггер отправлен на фабрику для переработки.]
Как видим две коровы и скаковая лошадь удалены (значения хэша undef, а следовательно и методов никаких не осталось), а ключи хэша остались, потому и ругается.
2
TheAthlete
158 / 158 / 16
Регистрация: 31.08.2010
Сообщений: 549
19.07.2013, 10:27  [ТС] 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Решил проблему - необходимо проверять значение %REGISTRY чтобы не разыменовать ссылку со значением undef и соответвенно проверяем на пустоту (истина/ложь) возвращаемое значение Animal->registered:

В результате получаем:
Perl
1
2
3
    sub registered {
      return map { 'экземлпяр ' . ref($_) . ' с именем ' . $_->name if defined $_ } values %REGISTRY;
    }
Perl
1
2
3
4
5
6
7
8
9
my @horses = map Horse->named($_), ('Триггер', 'мистер Эд');
say "Список животных перед входом в блок:\n", map( { "  $_\n" if $_ } Animal->registered);
{
  my @cows = map Cow->named($_), qw/Бесси Гвен/;
  my @racehorses = RaceHorse->named('Билли Бой');
  say "Список животных внутри блока: \n" , map( { "  $_\n" if $_ } Animal->registered);
}
say "Список животных, оставшихся в живых по выходе из блока: \n" , map( { "  $_\n" if $_ } Animal->registered);
say 'Конец программы.';
Ну и полный код:

Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/usb/bin/perl -w
use Modern::Perl;
use utf8;
 
binmode(STDOUT, ':utf8');
 
{ package Animal;
    use Carp 'croak';
    use File::Temp 'tempfile';
    use Scalar::Util 'weaken';
 
    use Data::Printer {
         color => {
            string      => 'black', # strings
         },
       };
 
    our %REGISTRY;
 
    ## конструкторы
    sub named {
      ref(my $class = shift) and croak " требуется имя класса";
      my $name = shift;
      my $self = { Name => $name, Color => $class->default_color };
 
      my ($fh, $filename) = tempfile();
      $self->{temp_fh} = $fh;
      $self->{temp_filename} = $filename;
 
      bless $self, $class;
      $REGISTRY{$self} = $self; # возвращает $self
      weaken $REGISTRY{$self};
      $self;
    }
 
    sub registered {
      p %REGISTRY;
      return map { 'экземлпяр ' . ref($_) . ' с именем ' . $_->name if defined $_ } values %REGISTRY;
    }
 
    sub DESTROY {
      my $self = shift;
      my $fh = $self->{temp_fh};
      close $fh;
      unlink $self->{temp_filename};
      say '[объект ' . $self->name . ' уничтожен.]';
    }
 
    ## заглушки (дожны быть перекрыты)
    sub default_color { 'коричневый' }
    sub sound { croak 'подкласс должен объявлять метод sound' }
 
    # методы классов/экземпляров
    sub speak {
      my $either = shift;
      say $either->name . ": " . $either->sound . "!";
    }
    sub name {
      my $either = shift;
      #$self->{Name};
      ref $either
        ? $either->{Name} # это экземпляр класса - вернуть кличку
        : "$either без имени"; # это класс
    }
    sub color {
      my $either = shift;
      ref $either
        ? $either->{Color} # это экземпляр класса - вернуть заданный цвет
        : $either->default_color; # это класс - вернуть цвет по-умолчанию
    }
    sub eat {
      my $either = shift;
      my $food = shift;
      say $either->name . " ест $food";
    }
 
    ## методы экземпляров
    sub set_name {
      ref(my $self = shift) or croak "требуется ссылка на экземпляр класса";
      $self->{Name} = shift;
    }
    sub set_color {
      ref(my $self = shift) or croak "требуется ссылка на экземпляр класса";
      $self->{Color} = shift;
    }
 
}
 
{ package Horse;
    our @ISA = qw/Animal/;
    sub sound { "иго-го" }
    sub DESTROY {
      my $self = shift;
      $self->SUPER::DESTROY;
      say '[' . $self->name . ' отправлен на фабрику для переработки.]';
    }
}
 
{ package RaceHorse;
    our @ISA = qw/Horse/;
    ## перекрыть и расширить родительский конструктор
    sub named {
      my $self = shift->SUPER::named(@_);
      $self->{$_} = 0 for qw/первых вторых третьих ни_одного/;
      $self;
    }
    sub won    { ++shift->{'первых'} }
    sub placed { ++shift->{'вторых'} }
    sub showed { ++shift->{'третьих'} }
    sub lost   { ++shift->{'ни_одного'} }
    sub standings {
      my $self = shift;
      join ', ', map " $_: $self->{$_}", qw/первых вторых третьих ни_одного/;
    }
}
 
{ package Sheep;
    our @ISA = qw/Animal/;
    sub sound { "бе-е-е-е" } # никакого "Молчания ягнят"
    sub default_color { 'белый' } # перекрыть цвет по умолчанию
}
 
{ package Cow;
    our @ISA = qw/Animal/;
    sub sound { "му-у-у-у" }
}
 
my @horses = map Horse->named($_), ('Триггер', 'мистер Эд');
say "Список животных перед входом в блок:\n", map( { "  $_\n" if $_ } Animal->registered);
{
  my @cows = map Cow->named($_), qw/Бесси Гвен/;
  my @racehorses = RaceHorse->named('Билли Бой');
  say "Список животных внутри блока: \n" , map( { "  $_\n" if $_ } Animal->registered);
}
say "Список животных, оставшихся в живых по выходе из блока: \n" , map( { "  $_\n" if $_ } Animal->registered);
say 'Конец программы.';
Кстати, вместо Data::Dumper лучше использовать Data::Printer, т.к. он выдает больше информации об объектах: Вывод данной программы:

Код
Wide character in print at /usr/local/share/perl5/Data/Printer.pm line 190.
{
    Horse=HASH(0x21cd6c8)   Horse  {
        Parents       Animal
        public methods (2) : DESTROY, sound
        private methods (0)
        internals: {
            Color           "коричневый",
            Name            "Триггер",
            temp_fh         *File::Temp::$fh  (read/write, layers: unix perlio),
            temp_filename   "/tmp/M2I4KGfujB"
        }
    } (weak),
    Horse=HASH(0x21cd698)   Horse  {
        Parents       Animal
        public methods (2) : DESTROY, sound
        private methods (0)
        internals: {
            Color           "коричневый",
            Name            "мистер Эд",
            temp_fh         *File::Temp::$fh  (read/write, layers: unix perlio),
            temp_filename   "/tmp/yWxU1qPWNz"
        }
    } (weak)
}
Список животных перед входом в блок:
  экземлпяр Horse с именем Триггер
  экземлпяр Horse с именем мистер Эд

Wide character in print at /usr/local/share/perl5/Data/Printer.pm line 190.
{
    Cow=HASH(0x21d4cc0)         Cow  {
        Parents       Animal
        public methods (1) : sound
        private methods (0)
        internals: {
            Color           "коричневый",
            Name            "Гвен",
            temp_fh         *File::Temp::$fh  (read/write, layers: unix perlio),
            temp_filename   "/tmp/ocvXhV9npW"
        }
    } (weak),
    Cow=HASH(0x259d7a8)         Cow  {
        Parents       Animal
        public methods (1) : sound
        private methods (0)
        internals: {
            Color           "коричневый",
            Name            "Бесси",
            temp_fh         *File::Temp::$fh  (read/write, layers: unix perlio),
            temp_filename   "/tmp/c7sNMaldcH"
        }
    } (weak),
    Horse=HASH(0x21cd6c8)       Horse  {
        Parents       Animal
        public methods (2) : DESTROY, sound
        private methods (0)
        internals: {
            Color           "коричневый",
            Name            "Триггер",
            temp_fh         *File::Temp::$fh  (read/write, layers: unix perlio),
            temp_filename   "/tmp/M2I4KGfujB"
        }
    } (weak),
    Horse=HASH(0x21cd698)       Horse  {
        Parents       Animal
        public methods (2) : DESTROY, sound
        private methods (0)
        internals: {
            Color           "коричневый",
            Name            "мистер Эд",
            temp_fh         *File::Temp::$fh  (read/write, layers: unix perlio),
            temp_filename   "/tmp/yWxU1qPWNz"
        }
    } (weak),
    RaceHorse=HASH(0x259d598)   RaceHorse  {
        Parents       Horse
        public methods (6) : lost, named, placed, showed, standings, won
        private methods (0)
        internals: {
            Color           "коричневый",
            Name            "Билли Бой",
            temp_fh         *File::Temp::$fh  (read/write, layers: unix perlio),
            temp_filename   "/tmp/wXrEDB1NHY",
            вторых          0,
            ни_одного       0,
            первых          0,
            третьих         0
        }
    } (weak)
}
Список животных внутри блока: 
  экземлпяр Horse с именем Триггер
  экземлпяр Horse с именем мистер Эд
  экземлпяр Cow с именем Гвен
  экземлпяр RaceHorse с именем Билли Бой
  экземлпяр Cow с именем Бесси

[объект Билли Бой уничтожен.]
[Билли Бой отправлен на фабрику для переработки.]
[объект Гвен уничтожен.]
[объект Бесси уничтожен.]
Wide character in print at /usr/local/share/perl5/Data/Printer.pm line 190.
{
    Cow=HASH(0x21d4cc0)         undef,
    Cow=HASH(0x259d7a8)         undef,
    Horse=HASH(0x21cd6c8)       Horse  {
        Parents       Animal
        public methods (2) : DESTROY, sound
        private methods (0)
        internals: {
            Color           "коричневый",
            Name            "Триггер",
            temp_fh         *File::Temp::$fh  (read/write, layers: unix perlio),
            temp_filename   "/tmp/M2I4KGfujB"
        }
    } (weak),
    Horse=HASH(0x21cd698)       Horse  {
        Parents       Animal
        public methods (2) : DESTROY, sound
        private methods (0)
        internals: {
            Color           "коричневый",
            Name            "мистер Эд",
            temp_fh         *File::Temp::$fh  (read/write, layers: unix perlio),
            temp_filename   "/tmp/yWxU1qPWNz"
        }
    } (weak),
    RaceHorse=HASH(0x259d598)   undef
}
Список животных, оставшихся в живых по выходе из блока: 
  экземлпяр Horse с именем Триггер
  экземлпяр Horse с именем мистер Эд

Конец программы.
[объект мистер Эд уничтожен.]
[мистер Эд отправлен на фабрику для переработки.]
[объект Триггер уничтожен.]
[Триггер отправлен на фабрику для переработки.]
1
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2013, 10:27

Ошибка при использовании WordApplication для формирования отчета
Программа формирует выходной документ Word, используя для этого данные из таблиц BDE. Выходной...

Ошибка создания объектов!
Привет всем еще раз! Тут у меня при динамическом создании объектов появляеться ошибка и ссылаеться...

Ошибка при использовании getline для считывания строки из файлового потока
Ошибка находится в 24 строке на точке. Код, подобный этому (а в этой строке фактически 1 в 1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.