Всем приветНикогда раньше с таким не приходилось сталкиваться, а вот счас пришлось:
есть штук пять скриптов, использующих одинаковые подпрограммы. Если в ней что то правлю - то приходится править во всех скриптах. Исходя из этого возникла мысль вынести общие подпрограммы в отдельный файл, и подключать его в скрипте.Как это реализовать - понятия не имею :)
>Как это реализовать - понятия не имею :)perldoc perlmod
Варианты:
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. Модуль.
>
>==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
прошу прощенья, опечатался.
>1) Дополнение: последней строкой должна идти строка:
> 1;
в каждом файле MyPkg.pm, в основной программе не обязательно.
>прошу прощенья, опечатался.
>>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.
победилось так:
cat myPkg.pmpackage myPkg;
require Exporter;
@ISA = qw( Exporter );
@EXPORT = qw(
func1
);sub func1() {
return('test');
}1;