Как я могу разделить свой код Perl на несколько файлов? - PullRequest
13 голосов
/ 06 декабря 2010

Мои сценарии становятся слишком длинными. Как мне разбить мой код (процедурные подпрограммы) на несколько файлов Perl и сказать интерпретатору, чтобы они их понимали?

Вроде как:

# -> main.pl

#include "foo.pl"
say_hello();

и

# -> foo.pl
sub say_hello {print "hello!"}

Ответы [ 3 ]

19 голосов
/ 06 декабря 2010

Что вы хотите сделать, это создать один или несколько модулей. Начнем с просмотра perlmod , особенно раздела Модули Perl .

Поскольку вы говорите, что пишете процедурный код, вам нужно будет экспортировать функции из ваших модулей. Традиционный способ сделать это - использовать Exporter (который поставляется с Perl), хотя Sub :: Exporter является более новым модулем CPAN, который допускает некоторые приятные вещи. (См. Также Sub :: Exporter :: Tutorial для введения в экспорт функций.)

Модули могут быть помещены в любой из каталогов, перечисленных в переменной @INC. Попробуйте perl -V, чтобы получить список. Вы также можете использовать lib для добавления каталогов во время выполнения. Одна хитрость заключается в том, чтобы использовать модуль FindBin , чтобы найти местоположение вашего скрипта, а затем добавить каталог, относящийся к этому:

use FindBin;                  # Suppose my script is /home/foo/bin/main.pl
use lib "$FindBin::Bin/lib";  # Add /home/foo/bin/lib to search path

Ваш пример кода, преобразованный в модуль:
В main.pl:

#! /usr/bin/perl
use strict;
use warnings;
use Foo;
say_hello();

In Foo.pm:

package Foo;

use strict;
use warnings;
use Exporter 'import';
our $VERSION = '1.00';
our @EXPORT  = qw(say_hello);

sub say_hello {print "hello!"}
2 голосов
/ 06 декабря 2010

Думаю, вы ищете do? http://perldoc.perl.org/functions/do.html

0 голосов
/ 06 декабря 2010

поместите его в ту же папку, что и ваш класс, и добавьте use ClassName в начало вызывающего файла.

Также проверьте учебник Perl OOP .

...