Подтвердить что ты не робот

В Perl, как мне поместить несколько пакетов в один файл .pm?

Я уверен, что где-то я читал, что это возможно, но есть несколько ошибок, о которых вам нужно знать. К сожалению, я не могу найти учебник или страницу, которые описывали, что вам нужно сделать. Я просмотрел Perl tutorials и не нашел тот, который, как я помню, читал. Может ли кто-нибудь указать мне на страницу или документ, описывающий, как поместить несколько пакетов в один файл .pm?

4b9b3361

Ответ 2

Вот как я обычно это делаю:

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' );

Ответ 3

Как это сделать: просто выполните несколько инструкций package.

Gotchas, о котором я могу думать: my -variables не локализованы в пакетах, поэтому они все равно разделены. Прежде чем вы производите какие-либо из них, вы по умолчанию в пакете main.

Ответ 4

Это то, что сработало для меня:

#!/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" (таким образом он не пойдет и не попытается найти файл).