如何在多个文件中拆分Perl代码?

hre*_*bkr 13 perl perl5

我的脚本太长了.如何将我的代码(程序子)拆分为多个Perl文件并告诉解释器理解它们?

有一些像:

# -> main.pl

#include "foo.pl"
say_hello();
Run Code Online (Sandbox Code Playgroud)

和:

# -> foo.pl
sub say_hello {print "hello!"}
Run Code Online (Sandbox Code Playgroud)

cjm*_*cjm 19

您要做的是创建一个或多个模块.首先查看perlmod,尤其是Perl Modules部分.

既然您说您正在编写过程代码,那么您将需要从模块中导出函数.传统的方法是使用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
Run Code Online (Sandbox Code Playgroud)

您的示例代码转换为模块:
在main.pl中:

#! /usr/bin/perl
use strict;
use warnings;
use Foo;
say_hello();
Run Code Online (Sandbox Code Playgroud)

在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!"}
Run Code Online (Sandbox Code Playgroud)