Я уверен, что где-то я читал, что это возможно, но есть несколько ошибок, о которых вам нужно знать. К сожалению, я не могу найти учебник или страницу, которые описывали, что вам нужно сделать. Я просмотрел Perl tutorials и не нашел тот, который, как я помню, читал. Может ли кто-нибудь указать мне на страницу или документ, описывающий, как поместить несколько пакетов в один файл .pm?
В Perl, как мне поместить несколько пакетов в один файл .pm?
Ответ 1
Вы просто начинаете новый пакет с другого оператора пакета:
package PackageOne;
# ...... code
package PackageTwo;
# .... more code
Ответ 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" (таким образом он не пойдет и не попытается найти файл).