エラーでハマっている為、use AutoLoaderする際の記述法と概
エラーでハマっている為、use AutoLoaderする際の記述法と概念を知りたいです。
-----------------------------------------------
test.cgi
use lib '/var/www/lib';
unshift @INC, '/var/www/lib';
use AutoLoader 'AUTOLOAD';
RegistDataList();#ここで存在しない関数を呼び出す
-----------------------------------------------
●自作モジュール(UserEditCommon.pm)
-----------------------------------------------
package UserEditCommon;
BEGIN{
use Exporter();
@ISA = qw(Exporter);
@EXPORT_OK = qw(RegistDataList);
}
use utf8;
use open ":utf8";
use open ":std";
use AutoLoader 'AUTOLOAD';
1;
__END__
ここ以降に色々な関数が記述されていますが、元々ライブラリーだった為、OOP的なコンストラクタやデストラクタは記述していません。
----------------------------------------------
$ perl -e 'use AutoSplit; autosplit($ARGV[0], $ARGV[1], 0, , 1)' UserEditCommon.pm auto
上記を実行すると、auto/UserEditCommon/関数名.alファイルが沢山出来ました。
それを/var/www/lib/autoとしてUP
●下記を参考にしているのですが
http://perldoc.jp/docs/perl/5.8.0/AutoLoader.pod.pod
抜粋「B<AutoLoader>のAUTOLOADサブルーチンために、
明示的にそれをインポートI<しなければなりません>。」
とある為、
use AutoLoader 'AUTOLOAD';
と記述する際はtest.cgi内ではsub AUTOLOADが必要ないと解釈しています。
実行した際、
Can't locate auto/main/RegistDataL.al in @INC (@INC contains: /var/www/lib ...
となり、auto/main/のRegistDataList.alが呼ばれているはずなのに、なぜRegistDataL.alという名前でのエラーなのでしょうか
●またtest.cgi内で
use AutoLoader;
とした場合のsub AUTOLOAD内の記述をお教え願えませんでしょうか
sub AUTOLOAD {
#print "$AUTOLOAD は未定義です";
my $sub = $AUTOLOAD;
$sub =~ s/.*:://;
$AutoLoader::AUTOLOAD = $sub;
goto &AutoLoader::AUTOLOAD;
}
上記のようにしても、エラー内容が
Can't locate auto/AutoLoader/RegistDataL.al in @INC (@INC contains: /var/...
となってしまい、どうすればよいか途方にくれています。
お礼
お返事遅れて申し訳ありませんでした。 サーバ内のモジュールを探したところ無かったので、CPANからDLしてきました。どうもありがとうございました。