Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наследования в Perl, Наследования в Perl 
:(
    Опции темы
washington
Дата 17.4.2005, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



Здравствуйте.
У меня токая проблемка.
Имеется два модуля.
person.pm и employee.pm – последний должен унаследовать все свойство и методы первого. Оба они лежат в папке info.

Код

package person;
sub new
{
    my $class=shift;
    my $self={};
    return bless($self, $class);
}
sub name
{
    my $self=shift;
    $self->{NAME}=shift if @_;
    return $self->{NAME};
}
sub age
{
    my $self=shift;
    $self->{AGE}=shift if @_;
    return $self->{AGE};
}
1;


Код

package employee;
use person;
@ISA=("person");
1;


Код

#!/usr/bin/perl -w

use CGI qw(:all);
use CGI::Carp qw(fatalsToBrowser);

use info::employee;    - после этой строчки


появляется ошибка
[Sun Apr 17 22:16:52 2005] DzTemp.pl: Compilation failed in require at start.pl line 6.
[Sun Apr 17 22:17:17 2005] DzTemp.pl: BEGIN failed--compilation aborted at start.pl line 6.

Мучаюсь уже второй день. Может быть кто подскажет как решить эту проблему.
Спасибо.

Это сообщение отредактировал(а) korob2001 - 18.4.2005, 01:42

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  travel.zip
PM MAIL   Вверх
korob2001
Дата 18.4.2005, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



В этот код:
Код

package employee;
use person;
@ISA=("person");
1;

Добавь такую строку:
Код

use lib qw( . );

Тоесть просто укажи где нужно искать модули и классы. Точка означает текущий каталог.
Код

package employee;
use lib qw( . );
use person;
@ISA=("person");
1;


Здесь сделай то же самое
Код

#!/usr/bin/perl -w
use lib qw( info );
use CGI qw(:all);
use CGI::Carp qw(fatalsToBrowser);

use employee;    - после этой строчки


ЗЫ: Пользуйся кнопкой "Код" для вставки и подсветки кода.

Удачи.

Это сообщение отредактировал(а) korob2001 - 18.4.2005, 02:19


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
washington
Дата 18.4.2005, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



Цитата(korob2001 @ 18.4.2005, 02:03)
В этот код:
Код

package employee;
use person;
@ISA=("person");
1;

Добавь такую строку:
Код

use lib qw( . );

Тоесть просто укажи где нужно искать модули и классы. Точка означает текущий каталог.
Код

package employee;
use lib qw( . );
use person;
@ISA=("person");
1;


Здесь сделай то же самое
Код

#!/usr/bin/perl -w
use lib qw( info );
use CGI qw(:all);
use CGI::Carp qw(fatalsToBrowser);

use employee;    - после этой строчки


ЗЫ: Пользуйся кнопкой "Код" для вставки и подсветки кода.

Удачи.

Здравствуйте.
Благодарю за интерес к моей теме.
Что-то не выходит.
Если вызывать сразу модуль person.pm из start.pl – то всё работает, а как только начинаю наследоваться в employee.pm говорит Compilation failed in require at start.pl line 5.
А когда напрямую запускаю employee.pm то там говорит Global symbol "@ISA" requires explicit package name at employee.pm line 6.
Вот код start.pl:
Код

#!/usr/bin/perl -w
use strict;
use lib qw( info );
use info::employee;


код info\ employee.pm:
Код

package employee;
use strict;
use lib qw(.);
use person;
@ISA=("person");
1;


код info\ person.pm
Код

package person;
use strict;
sub new
{
    my $class=shift;
    my $self={};
    return bless($self, $class);
}
sub name
{
    my $self=shift;
    $self->{NAME}=shift if @_;
    return $self->{NAME};
}
sub age
{
    my $self=shift;
    $self->{AGE}=shift if @_;
    return $self->{AGE};
}
1;


Может быть у вас есть какой ни будь работающий пример - может быть я что-то не дописываю где-то.
[email protected]

PM MAIL   Вверх
korob2001
Дата 18.4.2005, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



На вот тебе рабочий пример, называй классы и модули всегда с большой буквы, что бы в последствии не путать их с прагмами:

Класс Employee.pm
Код

package Employee;
use lib qw(.);
use Person;
push( @ISA, "Person" );
1;


Класс Person.pm
Код

package Person;
use strict;
sub new
{
    my $class=shift;
    my $self={};
    return bless($self, $class);
}
sub name
{
    my $self=shift;
    $self->{NAME}=shift if @_;
    return $self->{NAME};
}
sub age
{
    my $self=shift;
    $self->{AGE}=shift if @_;
    return $self->{AGE};
}

sub printed {
    my $class = shift;
    return("Hello, " . $class->{ NAME } . "! You are " . $class->{ AGE } . " old.");
}
1;


Ну и сам файл который подлючает класс Employee, который наследует все методы класса Person.
Файл test.pl
Код

#!/usr/bin/perl -w
use strict;
use lib qw( info );
use Employee;

my $person = new Employee;
$person->name('Denis');
$person->age(26);
print $person->printed();

Еще про ООП можешь почитать здесь:
http://forum.vingrad.ru/index.php?showtopi...=0&#entry334115

Удачи.

Это сообщение отредактировал(а) korob2001 - 18.4.2005, 12:09


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.