3

このスクリプトをコンパイルしようとしていますが、次のメッセージがあります。

@INCでEmail/Address.pmが見つかりません(@INCに含まれるもの:C:/ skeleton / perl / lib C:/ woven / perl / site / lib C:\新たに\perl \ vendor \ lib。)C: /skeleton/perl/ lib / Regexp / Common / Email /Address.pm9行目require at(eval 1)line 1。BEGINfailed--コンパイルはC:\ examples\script2.pl行4で中止されました。

私は本当にこのルートを持っているのでわかりません

C:/skeleton/perl/lib/Regexp/Common/Email/Address.pm

スクリプトをコンパイルしようとすると、なぜこのエラーメッセージが表示されるのか誰かが知っていますか?

どうもありがとう


私はこの文を使おうとしました:

lib'C:/ skeleton / perl / lib / Regexp / Common/Email'を使用します。

そしてコメントとしてこれらの2つの文を置きます:

use Regexp::Common qw[Email::Address];
  use Email::Address

次に、このエラーが発生します

Global symbol "%RE" requires explicit package name at C:\examples\script2.pl lin
e 10.Execution of C:\examples\script2.pl aborted due to compilation errors.

perldiagを見てみました

グローバルシンボル「%s」には明示的なパッケージ名が必要です(F)「usestrict」または「usestrict vars」と言いました。これは、すべての変数が字句スコープ("my"または"state"を使用)である必要があることを示しています。事前に「our」を使用するか、グローバル変数がどのパッケージにあるかを明示的に指定します(「::」を使用)。

しかし、コードの最初に「use」という文を使用してパッケージを使用する必要があることを理解しているので、少し理論的だと思います。

ちなみにこれは私のコードです:

 use Regexp::Common qw[Email::Address];
  use Email::Address;
  while (<>) {
  my (@found) = /($RE{Email}{Address})/g;
  my (@addrs) = map $_->address, Email::Address->parse("@found");
  print "X-Addresses: ", join(", ", @addrs), "\n";
  }

このコードは、前に尋ねた質問から取得します。

4

1 に答える 1

11

問題は、インストールしたことだと思いますRegexp::Common::Email::AddressEmail::Addressただし、別のモジュールであるも必要です。つまり、モジュールも にインストールする必要がありますC:/strawberry/perl/lib/Email/Address.pm

cpan を使用して をインストールしてみてください。不足している Perl モジュールをインストールする最も簡単な方法は何ですか?Email::Addressを参照してください。


もう少し説明を加えて更新します。

Perl モジュールは階層的に編成されています。::パッケージ セパレータは、モジュール ライブラリ パス内のディレクトリと同じです。モジュールの完全な名前/意味は、パッケージ自体の名前とインストール先のパスの両方から派生します。Restaurant::BillHat::Bill、およびというモジュールがあるとしますNames::Male::Bill。という名前の 3 つの異なるファイルがありますBill.pmが、それらは非常に異なる概念を表しています。それらは、モジュール ライブラリ内のパスによって互いに区別されます。

于 2012-08-16T08:21:02.523 に答える