2017-02-21 10 views
0

私はlibrary1.pmのlibrary2.pmから関数(func1)を呼び出しています。 library1で "use library2"と宣言したので、この関数は単に& func1()と呼ばれています。しかし、これは未定義のサブルーチンとしてエラーを投げています。しかし、私はその機能を "& library2 :: func1"と呼んでいます。ここにPerlのパッケージがないのですか?perl&library1 :: func1で定義されていないサブルーチン

+1

問題の最小限のデモンストレーションをご提供ください。 – ikegami

答えて

2

関数をエクスポートしましたか?コードを投稿していないので、あなたの欠けていることを伝えるのは難しいです!私はそれが何であるかを知っていれば、何が欠けているのかを説明することができます。代わりに、必要なものの例を整理しなければなりません。

library2.pmが含まれている必要があります

package library2; 

use strict; 
use warnings; 

use Exporter qw(import); 

our @EXPORT = qw(func1); 

... 

sub func1 { ... } 

... 

1; 

library1.pm含める必要があります。ところで

package library1; 

use strict; 
use warnings; 

use library2; 

... 

func1(...) 

... 

1; 

を、言語の名前は、Perl、ないPERLです。頭字語ではありません。


ところで、サブコールの前で&を使用しないでください。 Perlにあなたが呼んでいるサブのプロトタイプを無視するように指示する理由はありません。


ところで、小文字のモジュール名は技術的にはPerlで使用するために予約されています。しかし、もっと重要なのは、プラグマモジュール(言語に影響を与えるモジュール、およびその結果として語彙的にスコープが変更されるモジュール)の場合、大文字小文字のモジュールを予約することです。小文字のモジュール名は避けてください。ところで


、それは潜水艦が定義されている場所を確認する方が簡単だし、それはモジュールのデフォルトの輸出た場合に驚きを防ぐため

use library2 qw(func1); 

は、一般的に

use library2; 

よりも優れていますこれまでに変わった。

+0

上記の構文はあなたにとって間違いありません。しかし、library2 :: func1を指定せずにlibrary1のfunc1を呼び出すと、エラーが発生します。私はそれの正確な理由を知りたいと思っており、あなたの応答に感謝します。 –

+1

コードを投稿していないので、何が欠けているのか分かりにくいです!私はそれが何であるかを知っていれば、何が欠けているのかを説明することができます。代わりに、必要なものの例を整理しなければなりません。問題のデモンストレーションを行う場合は、より多くの情報を提供することができます。あるいは、少なくとも私があなたのコードから抜けている行を教えてください。 – ikegami

+0

それは問題ありません。どうもありがとうございました –

関連する問題