我有一个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)的简单方法不起作用.
如果您有兴趣将Perl脚本打包成包含所依赖的所有模块的二进制文件,则可以使用PAR Packager:
pp -o binary_name foo.pl
Run Code Online (Sandbox Code Playgroud)
您的代码不起作用(尽管说明您收到的错误消息会很有帮助),因为您在定义 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)
补充: