Это похоже на очень простой вопрос, но каким-то образом мой Google-Фу не смог меня.
Какой синтаксис для включения функций из других файлов в Perl? Я ищу что-то вроде C #include "blah.h"
Я видел вариант использования модулей Perl, но похоже, что это потребует незначительной перезаписи моего текущего кода.
Используйте модуль. Проверьте perldoc perlmod и Exporter.
В файле Foo.pm
package Foo;
use strict;
use warnings;
use Exporter;
our @ISA= qw( Exporter );
# these CAN be exported.
our @EXPORT_OK = qw( export_me export_me_too );
# these are exported by default.
our @EXPORT = qw( export_me );
sub export_me {
# stuff
}
sub export_me_too {
# stuff
}
1;
В вашей основной программе:
use strict;
use warnings;
use Foo; # import default list of items.
export_me( 1 );
Или для получения обеих функций:
use strict;
use warnings;
use Foo qw( export_me export_me_too ); # import listed items
export_me( 1 );
export_me_too( 1 );
Вы также можете импортировать переменные пакета, но практика сильно обескуражена.
Perl require выполнит эту работу. Вам нужно будет убедиться, что любые требуемые файлы возвращают правду, добавляя
1;
в конце файла.
Здесь крошечный пример:
$ cat m1.pl
use strict;
sub x { warn "aard"; }
1;
$ cat m2.pl
use strict;
require "m1.pl";
x();
$ perl m2.pl
aard at m1.pl line 2.
Но перейдите в модули , как только сможете.
ИЗМЕНИТЬ
Несколько преимуществ переноса кода из сценариев в модули:
require
, загружаются только во время выполнения, тогда как пакеты, загруженные с помощью use
, подвергаются более ранним проверкам времени компиляции.A package allows you to expose some functions, but hide others. With no packages, all functions are visible.
как нам это сделать?
Кроме того, do 'file.pl';
будет работать, но модули являются лучшим решением.
Я знаю, что вопрос конкретно говорит о "функциях", но я получаю этот пост высоко в поиске, когда я ищу "perl include", и часто раз (например, сейчас) я хочу включить переменные (простым способом, без думать о модулях). И поэтому я надеюсь, что здесь будет опубликован мой пример (см. Также: Perl require и переменные; вкратце: используйте require
и убедитесь, что оба файла "includeser" и "includesee" объявляют переменную как our
):
$ perl --version
This is perl, v5.10.1 (*) built for i686-linux-gnu-thread-multi ...
$ cat inc.pl
use warnings;
use strict;
our $xxx = "Testing";
1;
$ cat testA.pl
use warnings;
use strict;
require "inc.pl";
our $xxx;
print "1-$xxx-\n";
print "Done\n";
$ perl testA.pl
1-Testing-
Done
$ cat testB.pl
use warnings;
use strict;
our $xxx;
print "1-$xxx-\n";
$xxx="Z";
print "2-$xxx-\n";
require "inc.pl";
print "3-$xxx-\n";
print "Done\n";
$ perl testB.pl
Use of uninitialized value $xxx in concatenation (.) or string at testB.pl line 5.
1--
2-Z-
3-Testing-
Done
Что вы ищете, это "require file.pl", но то, что вы должны смотреть, это "использовать модуль".
Вы действительно должны изучить модули perl, однако для быстрого взлома вы всегда можете запустить "perl -P", который запускает ваш perl script через предварительный процессор C. Это означает, что вы можете делать #include и друзей....
Только быстрый взломать, будьте осторожны; -)
Вышеупомянутые ответы на все игнорируются частью клиента: как импортировать модуль.
См. принятый ответ здесь: Как использовать модуль Perl из относительного местоположения?
Без трюка в этом ответе у вас будет много проблем с попыткой получить путь к модулю, когда вы use $mymodule;