Как включить функции из другого файла в мой скрипт на Perl?
это кажется очень простым вопросом, но почему-то мой Google-Fu подвел меня.
каков синтаксис для включения функций из других файлов в Perl? Я ищу что-то вроде C #include "blah.h"
Я видел вариант использования модулей Perl, но похоже, что для этого потребуется не незначительная переписать мой текущий код.
8 ответов:
использовать модуль. Проверьте perldoc perlmod и экспортер.
в файле 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 требуются будет делать эту работу. Вы должны убедиться, что любые требуют, что файлы возврат истина, добавив
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.но перейти на модули как только сможешь.
EDIT
несколько преимуществ переноса кода из скриптов модулей:
- без пакетов, все занимает один пространство имен, поэтому вы можете столкнуться с ситуацией, когда две функции из разных файлов хотят одно и то же имя.
- пакет позволяет открыть некоторые функции, но скрыть другие. Без пакетов, все функции видны.
- файлы, включенные с
requireзагружаются только во время выполнения, тогда как пакеты загружаются сuseподлежат более ранние проверки времени компиляции.
Я считаю, что вы ищете require или использовать ключевые слова.
Я знаю, что вопрос конкретно говорит "функции", но я получаю этот пост высоко в поиске, когда я ищу" perl include", и часто (например, сейчас) я хочу включить переменные (простым способом, без необходимости думать о модулях). И поэтому я надеюсь, что это нормально, чтобы опубликовать мой пример здесь (см. Также:Perl require и переменные; вкратце: используйте
require, и убедитесь, что оба файла" includer "и" includee " объявляют переменную как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
вы действительно должны заглянуть в модули perl, однако для быстрого взлома вы всегда можете запустить "perl-P", который запускает ваш скрипт perl через препроцессор C. Это означает, что вы можете сделать #Include и друзей....
только быстрый Хак, хотя, будьте осторожны ;-)
все вышеперечисленные ответы игнорировали клиентскую часть: как импортировать модуль.
увидеть принятый ответ здесь: как использовать модуль Perl из относительного местоположения?
без трюка в этом ответе, вы будете иметь много проблем, пытаясь получить путь модуля прямо, когда вы
use $mymodule;
Comments