Наследования в Perl

  • Автор темы Guest_Washington
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest_Washington

Гость
#1
Здравствуйте.
У меня токая проблемка.
Имеется два модуля.
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.

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

FUKS

Гость
#2
А путь к папке info где-то прописан? Вот что откопал в каком-то мануале:

Код:
Создание библиотеки. 

Если вы хотите создать модуль отдельным файлом и использовать как библиотеку подпрограмм, при этом вызывать подпрограммы библиотеки, не указывая имени модуля, вам необходимо оформить модуль следующим образом: 
package имя_модуля;	# Такое же как и имя этого файла без расширения '.pm'
require Exporter;	# Обязательная строка для экспорта имен
@ISA = qw(Exporter);	# -//-
@EXPORT = qw(func1 func2) # Перечисляем имена функций. Внимание ! нет запятой!
@EXPORT_OK = qw( $переменная @массив ); # Указать публичные переменные, массивы
и т.д. если необходимо
{ # Начало блока модуля
..... 
sub func1
........
sub func2
........
1;
}
Данный файл с расширением ".pm" должен храниться в одной из библиотечных директорий Perl. Они перечислены в массиве @INC, одна из них обычно "/usr/local/lib/perl/". 

В головной программе вы указываете: 
* use имя_модуля; 
и вам становятся доступны имена подпрограмм данного модуля.
 
V

Vovochka

Гость
#3
Код:
package employee;
use person;
@ISA=("person");
1;
меняем на

Код:
package employee;
use base person;
1;
это раз, а во вторых
модуль называеться employee
а ты пишешь: info::employee;
Тоже ничего не выйдет. Названия пакетов поменяй employee => info::employee
Это касаеться и модуля person

Для: FUKS
Блин, ты темы из самого конца искал? Им уже пару лет.
 
Статус
Закрыто для дальнейших ответов.