モジュールのあるディレクトリの指定
まず同じディレトクリにある場合は動きます.これは,モジュールのあるディレクトリを持つ@INCにカレントディレクトリ“.”があるためです.例えば,以下のsam.plとsam.pmを同じディレクトリに置き,sam.plを実行します.
--sam.pl-- #!/usr/bin/perl -w use strict; use Sam; package main; my $aSam=Sam->new; print '$aSam: '.$aSam->print."\n"; --sam.pm-- #!/usr/bin/perl -w use strict; package Sam; sub new{ bless return {},$_[0]; } sub print{ return "hello."; } 1;
実行結果はこのようになります.
bash-2.05$ ./sam.pl hello.
sam.pmを./module/に移動すると動かなくなります.
bash-2.05$ ./sam.pl Can't locate Sam.pm in @INC (@INC contains: /usr/lib/perl5/5.6.1/cygwin-multi /usr/lib/perl5/5.6.1 /usr/lib/perl5/site_perl/5.6.1/cygwin-multi /usr/lib/perl5/site_perl/5.6.1 /usr/lib/perl5/site_perl .) at ./sam.pl line 3. BEGIN failed--compilation aborted at ./sam.pl line 3.
sam.plにライブラリのあるディレクトリを指定しなくてはなりません.use lib
を使用します.
--sam.pl--
#!/usr/bin/perl -w
use strict;
use lib 'module'; #←sam.pmのあるディレクトリを指定.
use Sam;
package main;
my $aSam=Sam->new;
print '$aSam: '.$aSam->print."\n";
実行結果です.
bash-2.05$ ./sam.pl hello.
モジュールのあるディレクトリは複数指定できます.
--sam.pl--
#!/usr/bin/perl -w
use strict;
use lib 'module','mod';
#use lib qw(module mod); #これでも可
use Sam;
package main;
my $aSam=Sam->new;
print '$aSam: '.$aSam->print."\n";
動作環境は,WindowsNT Workstation 4.0+SP6,cygwin 1.3.3,perl 5.6.1,bash 2.05です.