私は時々この問題に遭遇します。何らかの理由で、エクスポートされたサブルーチンを呼び出そうとすると「未定義のサブルーチン」エラーが発生します。成熟したコードでは、突然発生するように見えるため、理由がわかりません。
前回それが起こったとき、私は「package_2 :: exported_sub()」のようなものを使用することに頼ったと思います。今回は機能しましたが、package_2の別のサブに対してエラーが返されました。「usepackage_2;」を入れても 上記の行では役に立ちません!私が考えることができる唯一のことは、エクスポートされたサブが何らかの形で未定義であるということです。
私のコードは次のようになります。
ファイルpackage_1.pm:
package package_1;
require Exporter;
@ISA = qw( Exporter );
@EXPORT = qw(
local_sub
);
use package_2;
use strict;
use warnings;
use diagnostics;
sub local_sub {
&exported_sub;
}
ファイルpackage_2.pm:
package package_2;
require Exporter;
@ISA = qw( Exporter );
@EXPORT = qw(
exported_sub
);
use strict;
use warnings;
use diagnostics;
sub exported_sub {
# do something
}
私はもう終わりです...これがポップアップしたとき、私は無関係のホットチケットに取り組んでいました、そしてユーザーテストは明日始まります!
前もって感謝します!
アップデート:
池上、修正してくれてありがとう!でも、興味があります。私はこれに再び遭遇しましたが、今回は循環依存を見つけることができませんでした。私はそれを1行に絞り込みました:
$row->{$attr} = ' ' unless ( $row->{$attr} );
明らかに、この行は使用または要求とはまったく関係ありません!Apacheのログを調べましたが、目立つものは何もないようですが、見つけたものはすべて解決するように機能します。さらに警告を受け取ることができるかどうかも確認します。
それとは別に、次のステップとして何をお勧めしますか?
ありがとう!