質問: use strict ; use KCatch qw( source ); use SOAP::Lite on_action => sub { sprintf '%s%s', @_ }; use SOAP::Transport::HTTP ; use Jcode; use HTML::Template; use XML::Simple; use Data::Dumper; use encoding 'euc-jp', STDOUT => "utf8"; require 'TreePP.pm'; 上記コードをSOAP::Liteからエラーが発生します。 require 'TreePP.pm'に関しては同一フォルダにpmファイルを設置しており エラーは出ない状態です。 SOAP::Liteも同様にダウンロードし、Lite.pmを同一フォルダに設置し、 require 'Lite.pm'としたのですが、エラーが発生する状況でした。 どなたかわかる方いらっしゃいましたらご回答の程よろしくお願い致します。 ※エラー内容追記です。 [hello.cgi:9:die] Can't locate SOAP/Lite.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /home/users/1/lolitapunk.jp/web/hello.cgi line 9, line 855. BEGIN failed--compilation aborted at /home/users/1/lolitapunk.jp/web/hello.cgi line 9, line 855. > > on_action => sub { sprintf '%s%s', @_ }; > > >
回答: エラーメッセージが示す通りで、useする.pmモジュールは@INCに定義されているディレクトリのどれかの下に存在しなければならないのに、そうなっていないということです。@INCに「同一フォルダ」が含まれていなければ、「同一フォルダにpmファイルを設置」しても無効です。 簡単な対処法としては、最初に ``` use lib 'SOAP/lite.pmが存在するディレクトリ'; ``` と書き加えておくととりあえず解決すると思います。