Forum Webscript.Ru
Программирование => Perl => Тема начата: washington от 18 Апреля 2005, 00:12:15
-
Здравствуйте.
У меня токая проблемка.
Имеется два модуля.
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.
Мучаюсь уже второй день. Может быть кто подскажет как решить эту проблему.
Спасибо.
-
1. впиши use strict в каждый модуль и в стартовый скрипт
2. называй модули так же, как ты собираешься их вызывать (info::employee != employee). Ответ на вопрос почему есть практически в любой книжке по Perl.
3. в Perl возможно лишь наследования методов
-
Да и не совсем понятен смысл такого применения? использовать модуль через другой модуль? Только замедлять исполнение конечного скрипта.
-
Здравствуйте.
Благодарю за интерес к моей теме.
Что-то не выходит.
Если вызывать сразу модуль 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;
Может быть у вас есть какой ни будь рабочий пример - может быть я что-то не дописываю где-то. washik@inbox.ru
-
Глобальные относительно пакета переменные объявляются как
use vars qw( $var1 $var2 $var2 );
и начиная с Perl 5.005 есть более удобный способ записи
our $var1
our( $var2, $var3 );
-
А в последних версиях перла есть еще более удобная конструкция для наследования:
use base qw(Class);
И не нужно никаких use vars, our и require =)