モジュールのあるディレクトリの指定

まず同じディレトクリにある場合は動きます.これは,モジュールのあるディレクトリを持つ@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です.