30

我很确定我在某个地方读到过它是可能的,但是您需要注意一些问题。不幸的是,我找不到描述您需要做什么的教程或页面。我浏览了Perl 教程,但没有找到我记得读过的那个。有人可以给我指出一个描述如何将多个包放入单个 .pm 文件的页面或文档吗?

4

4 回答 4

41

这就是我通常的做法:

use strict;
use warnings;
use 5.010;

{
    package A;
    sub new   { my $class = shift; bless \$class => $class }
    sub hello { say 'hello from A' }
}

{
    package B;
    use Data::Dumper;
    sub new   { my $class = shift; bless { @_ } => $class }
    sub hello { say 'Hello from B + ' . shift->dump       }
    sub dump  { Dumper $_[0] }
}

$_->hello for A->new, B->new( foo => 'bar' );
于 2009-11-17T15:12:42.933 回答
19

您只需使用另一个包语句开始新包:

package PackageOne;

# ...... code

package PackageTwo;

# .... more code

这种方法的问题存档于 2009 年

于 2009-11-17T13:35:24.410 回答
8

这对我有用:

#!/usr/bin/perl

use strict;
use warnings;

{
   package A;
   use Exporter;
   our @ISA = qw(Exporter);
   our @EXPORT_OK = qw(a_sub);
   our @EXPORT = qw(a_sub);

   sub a_sub {
       # your code ...
   }
}
{
   package B;
   use Exporter;
   our @ISA = qw(Exporter);
   our @EXPORT_OK = qw(b_sub);
   our @EXPORT = qw(b_sub);

   sub b_sub {
       # your code ...
   }
}

# Main code starts here ##############

use boolean;
use Data::Dumper;

import A qw(a_sub);
import B qw(b_sub);

a_sub();
b_sub();

重要的一点是,不要使用“use”,而是将其更改为“import”(这样它就不会去尝试查找文件)。

于 2016-05-29T11:51:50.080 回答
3

怎么做:只需发出多package条指令。

我能想到的陷阱:-my变量不是包本地化的,所以无论如何它们都是共享的。在您发布任何内容之前,默认情况下您处于打包状态main

于 2009-11-17T13:36:54.780 回答