URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5156
[ Назад ]

Исходное сообщение
"Туплю: как вынести подпрограмму в одтельный файл?"

Отправлено Dr. Nebula , 19-Фев-06 17:38 
Всем привет

Никогда раньше с таким не приходилось сталкиваться, а вот счас пришлось:
есть штук пять скриптов, использующих одинаковые подпрограммы. Если в ней что то правлю - то приходится править во всех скриптах. Исходя из этого возникла мысль вынести общие подпрограммы в отдельный файл, и подключать его в скрипте.

Как это реализовать - понятия не имею :)


Содержание

Сообщения в этом обсуждении
"Туплю: как вынести подпрограмму в одтельный файл?"
Отправлено chip , 19-Фев-06 18:10 

>Как это реализовать - понятия не имею :)

perldoc perlmod


"Туплю: как вынести подпрограмму в одтельный файл?"
Отправлено rWizard , 19-Фев-06 18:10 
Варианты:
1. Модуль.

==file MyPkg.pm:
package MyPkg;

sub func1 {
  return 'test';
}

==file myprog.pl:
require MyPkg;

print MyPkg::func();

2. Модуль с экпортом
==file MyPkg.pm:
package MyPkg;
BEGIN {
       use Exporter   ();
       our ($VERSION,  @EXPORT );
       @EXPORT = qw(&func1);
}
sub func1 {
  return 'test';
}

==file myprog.pl:
use MyPkg;

print func();

3. Модуль-объект

==file MyPkg.pm:
package MyPkg;
sub new {
  my $self = { SOME_DATE => 'test' }
  bless $self;
  return $self;
}

sub func1 {
my $self = shift;
return $self->{SOME_DATA}
}

==file myprog.pl:
use MyPkg;
my $mpkg = MyPkg->new();
print $mpkg->func1();

рекомедуется к прочтению man perlmod, man perltoot


"Туплю: как вынести подпрограмму в одтельный файл?"
Отправлено chip , 19-Фев-06 18:19 
>Варианты:
>1. Модуль.
>
>==file MyPkg.pm:
>package MyPkg;
>
>sub func1 {
>  return 'test';
>}
>
>==file myprog.pl:
>require MyPkg;
>
>print MyPkg::func();
>
>2. Модуль с экпортом
>==file MyPkg.pm:
>package MyPkg;
>BEGIN {
>       use Exporter   ();
>
>       our ($VERSION,  @EXPORT );
>
>       @EXPORT = qw(&func1);
>}
>sub func1 {
>  return 'test';
>}
>
>==file myprog.pl:
>use MyPkg;
>
>print func();
>
>3. Модуль-объект
>
>==file MyPkg.pm:
>package MyPkg;
>sub new {
>  my $self = { SOME_DATE => 'test' }
>  bless $self;
>  return $self;
>}
>
>sub func1 {
> my $self = shift;
> return $self->{SOME_DATA}
>}
>
>==file myprog.pl:
>use MyPkg;
>my $mpkg = MyPkg->new();
>print $mpkg->func1();
>
>рекомедуется к прочтению man perlmod, man perltoot


1) Дополнение: последней строкой должна идти строка:
   1;
2)
my $self = { SOME_DATE => 'test' }
[..skip..]
return $self->{SOME_DATA} <-- SOME_DATE


"Туплю: как вынести подпрограмму в одтельный файл?"
Отправлено rWizard , 19-Фев-06 18:36 
прошу прощенья, опечатался.
>1) Дополнение: последней строкой должна идти строка:
>   1;
в каждом файле MyPkg.pm, в основной программе не обязательно.

"Туплю: как вынести подпрограмму в одтельный файл?"
Отправлено Dr. Nebula , 19-Фев-06 18:43 
>прошу прощенья, опечатался.
>>1) Дополнение: последней строкой должна идти строка:
>>   1;
>в каждом файле MyPkg.pm, в основной программе не обязательно.

Спасибо, только что то модуль с экспортом работать не хочет:

cat myPkg.pm
#!/usr/bin/perl -w
package myPkg;
BEGIN {
       use Exporter   ();
       our ($VERSION,  @EXPORT );
       @EXPORT = qw(&func1);
}
sub func1 {
return 'test';
}
1;
=====================
cat test.pl
#!/usr/bin/perl -w
use myPkg;

print func1();

=====================
./test.pl
Undefined subroutine &main::func1 called at ./test.pl line 4.


"Туплю: как вынести подпрограмму в одтельный файл?"
Отправлено Dr. Nebula , 19-Фев-06 19:01 
победилось так:
cat myPkg.pm

package myPkg;

require Exporter;
        @ISA = qw( Exporter );
        @EXPORT = qw(
                func1
        );

sub func1() {
        return('test');
}

1;