30

どこかでそれが可能であると読んだことは確かですが、知っておく必要があるいくつかの落とし穴があります。残念ながら、何をする必要があるかを説明したチュートリアルやページが見つかりません。Perl のチュートリアルを調べましたが、読んだ覚えのあるものは見つかりませんでした。複数のパッケージを 1 つの .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 に答える