如何将Perl应用程序作为单个文件分发?

kno*_*orv 5 perl distribution

我有一个Perl脚本(foo.pl),使用require机制从同一目录加载Foo.pm:

require "./Foo.pm";
...
my $foo = new Foo::Bar;
Run Code Online (Sandbox Code Playgroud)

Foo.pm遵循标准模块格式:

package Foo::Bar;
...
1;
Run Code Online (Sandbox Code Playgroud)

而不是将我的应用程序分发为两个文件(foo.pl和Foo.pm),我只想分发一个文件.更具体地说,我想将Foo.pm作为foo.pl脚本的一部分.

我如何实现这一目标?

简单地合并两个文件(cat foo.pl Foo.pm> foo2.pl)的简单方法不起作用.

Dre*_*ens 5

如果您有兴趣将Perl脚本打包成包含所依赖的所有模块的二进制文件,则可以使用PAR Packager:

pp -o binary_name foo.pl
Run Code Online (Sandbox Code Playgroud)


Eth*_*her 3

您的代码不起作用(尽管说明您收到的错误消息会很有帮助),因为您在定义 Foo::Bar 之前尝试使用它。尝试这个:

use strict;
use warnings;
my $foo = Foo::Bar->new();
# more code...

# end code

# begin definitions
BEGIN {
    package Foo::Bar;
    use strict;
    use warnings;
    # definitions...
    1;

    package Foo::Baz;
    # more stuff, if you need to define another class
}
Run Code Online (Sandbox Code Playgroud)

补充: