3

私は Perl を初めて使用し、次の問題に直面しています。次の問題が機能しない理由がわかりません。

私のPerlモジュールには以下が含まれています:

package PACK2;
use Exporter;
@ISA = ('Exporter');
@EXPORT_OK=('whom');

sub why(){
    print "why\n";
}

sub whom(){
      print "whom\n";
}
1;

私のPerlファイルには以下が含まれています:

#!/usr/bin/perl -w

use pack;
use pack2 ('whom');

PACK::who();
&whom();

私はこのプログラムを実行し、見つけることができませんwhom:

perl use_pack_pm.pl

who
Undefined subroutine &main::whom called at use_pack_pm.pl line 7.
4

3 に答える 3

8

Perl は大文字と小文字を区別する言語です。モジュール「pack2」と「PACK2」は同じではないと思います。(しかし、私は実際にこれをテストしていません。)

于 2010-09-15T15:26:17.980 に答える
5

内部的use pack2 ('whom');には次のようなものに変換されます

BEGIN {
    require pack2;
    pack2->import('whom');
}

importただし、perl は呼び出しをpack2試みる前に呼び出し可能かどうかをチェックします。あなたの例では、名前が付けられたパッケージがないpack2ため、import呼び出す関数はありません。パッケージ名とファイル名が一致する場合、perl は がimport提供する関数を見つけますExporter

Perl はこれがいつ意図的に行われたかを判断するのに苦労するため、これに対する警告はありません。ほとんどの OO モジュールは関数や変数をエクスポートしないため、import関数を提供しません。

于 2010-09-15T16:03:24.697 に答える