0

私は、2 つの方法で使用したいfoo1 つのプライマリ サブルーチン (たとえば ) を含む perl モジュール (たとえば )を作成しました。f()

  1. モジュールをインポートし、モジュールをインポートするスクリプトからfooサブルーチンを呼び出します。f(...)foo
  2. モジュールをインポートし、サブモジュールまたは適切なバリエーションを呼び出すモジュールfooを取得するだけです。foof(@ARGV)

これらの 2 つのオプションを持つ 1 つのモジュールを作成できますか、または
を呼び出すラッパー モジュール
を作成する必要がありますか?foo_default.pmuse foofoo::f(@ARGV)

4

2 に答える 2

2

古典的な方法

関数の完全修飾名を提供したくない場合は、次のようにする必要がありますexport

package foo;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw/func1 func2/;

sub func1 { return "hi $_[0] !\n"; }
sub func2 { return "yo breakdown mama !\n"; }

だからそれを使用するには:

# uncomment this if you need to add a "./lib" dir in @INC
# BEGIN{ push @INC, "./lib"; }

use foo;

my $res = func1("you");
print $res;
于 2013-01-09T00:46:46.657 に答える
1

foo モジュールの例:

package foo;

my $nodef = 0;

sub import {
  my ($package, $arg) = @_; 
  print "import called $arg\n";
  $nodef = 1 if (defined $arg && $arg eq 'nodef');
  f(@ARGV) if !$nodef;
}

sub f() {
  print "f() called: ", join(", ", @_), "\n";
}

1;

そしてユースケース:

sub def {
  use foo;
}

sub nodef {
  use foo qw(nodef);
}

def();
nodef();
于 2013-01-09T01:04:14.457 に答える