Как включить функции из другого файла в мой скрипт на Perl?



это кажется очень простым вопросом, но почему-то мой Google-Fu подвел меня.



каков синтаксис для включения функций из других файлов в Perl? Я ищу что-то вроде C #include "blah.h"



Я видел вариант использования модулей Perl, но похоже, что для этого потребуется не незначительная переписать мой текущий код.

749   8  

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 или использовать ключевые слова.

и do 'file.pl'; будет работать, но модули-лучшее решение.

Я знаю, что вопрос конкретно говорит "функции", но я получаю этот пост высоко в поиске, когда я ищу" 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 и друзей....

только быстрый Хак, хотя, будьте осторожны ;-)

Что вы ищете, это 'require file.pl", но то, что вы должны смотреть на это "использовать модуль".

все вышеперечисленные ответы игнорировали клиентскую часть: как импортировать модуль.

увидеть принятый ответ здесь: как использовать модуль Perl из относительного местоположения?

без трюка в этом ответе, вы будете иметь много проблем, пытаясь получить путь модуля прямо, когда вы use $mymodule;

Comments

    Ничего не найдено.