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

Это похоже на очень простой вопрос, но каким-то образом мой Google-Fu провалил меня.

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

Я видел вариант использования модhive 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 будет выполнять эту работу. Вам нужно будет убедиться, что любые «требуемые» файлы возвращают правду, добавляя

 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 , подлежат более ранним проверкам времени компиляции.

Я считаю, что вы ищете ключевые слова require или use .

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

Я знаю, что вопрос конкретно говорит о «функциях», но я получаю этот пост высоко в поиске, когда я ищу «perl include», и часто раз (например, сейчас) я хочу включить переменные (простым способом, не задумываясь о модулях). И поэтому я надеюсь, что это нормально, чтобы опубликовать мой пример здесь (см. Также: требования Perl и переменные ; вкратце: используйте require и убедитесь, что оба файла «includeser» и «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;

  • Удаление строки из огромного файла в Perl
  • Как я могу использовать новый модуль Perl без разрешения на установку?
  • Почему мои тесты на Perl терпят неудачу с `use encoding 'utf8'`?
  • Как преобразовать стробированную версию ссылки на массив в ссылку на массив в Perl?
  • Как я могу динамически включать модули Perl без использования eval?
  • Использование my с круглыми скобками и только одна переменная
  • Как сделать «использовать My :: defaults» с современными настройками perl & utf8?
  • Какой лучший синтаксический анализатор XML для Perl?
  • Как я могу ускорить свою программу Perl?
  • Как я могу запускать и забывать процесс в Perl?
  • Почему при использовании ActivePerl я должен указать ключ -i с расширением резервной копии?
  • Interesting Posts

    Аннотации @WebServlet не работают с Tomcat 8

    Вариант Strict On и .NET для программистов VB6

    Должны ли мы использовать EventQueue.invokeLater для любого обновления графического интерфейса пользователя в настольном приложении Java?

    Как вы подписываете запрос на подпись сертификата в своем сертификационном центре?

    Google Chrome – Новая вкладка – закладки – Как восстановить удаленные файлы?

    Определить угол зрения камеры смартфона

    Зимует-Викисклад annotations-4.0.1.Final.jar; недопустимый заголовок LOC (плохая подпись)?

    Как преобразовать Set в String ?

    Персональный кейлоггер

    Как я могу остановить Excel от употребления моих вкусных файлов CSV и извлечения бесполезных данных?

    Как проверить естественную ориентацию устройства (по умолчанию) на Android (т. Е. Получить пейзаж, например, Motorola Charm или Flipout)

    Могу ли я перенести установку Ubuntu vmware на новый ноутбук?

    Текст текста в текстовом виде Android

    Восстановить состояние std :: cout после его манипулирования

    Как программно отключить мобильный Android?

    Давайте будем гением компьютера.