perl include 文件--------require

perl的包含文件
require ("myfile.pl");

        基本的包含文件全过程
  • 建立一个include文件,就按整个的perl script文件格式建立,文件中写sub
[macg@localhost perltest]$ vi file1.pl

#!/usr/bin/perl

sub gotest{
my(@tmp)=@_;

open (MYFILE, $tmp[0]) || die ("Could not open file");
my($line,$newline);
while ($line=<MYFILE>) {
$line=~ tr/a-zA-Z//s;
  print "good \n";
  print "\$line is :$line";
  print "\$\& is : $&", "\n";
  }

close(MYFILE);
   
  • 主perl文件require上边的包含文件,引用定义在包含文件中的sub
[macg@localhost perltest]$ vi tip.pl
#!/usr/bin/perl

require ("file1.pl");

$file="/home/macg/perltest/gogo";
&gotest($file);

@arrary=qw(a b cc dd);
$pointer = \@arrary;
for($i=0;$i<4;$i++) {
   print "$i : $pointer->[$i] \n";  }
[macg@localhost perltest]$ ./tip.pl
file1.pl did not return a true value at ./tip.pl line 3.
     

   上面哪里错了? 包含文件,必须return一个1
[macg@localhost perltest]$ vi file1.pl

#!/usr/bin/perl

sub gotest{
my(@tmp)=@_;

open (MYFILE, $tmp[0]) || die ("Could not open file");
my($line,$newline);
while ($line=<MYFILE>) {
$line=~ tr/a-zA-Z//s;
  print "good \n";
  print "\$line is :$line";
  print "\$\& is : $&", "\n";
  }

close(MYFILE);
}

1;   
[macg@localhost perltest]$ ./tip.pl
good
$line is :I WANTWANT TO go to NY. And I also wWant to be DC.


             require;           不指定文件名
变量 $_ 的值即作为文件名传递给require
 

        require   ("testdir/file1.pl");     允许带路径名
#!/usr/bin/perl

require ("testdir/file1.pl");

$file="/home/macg/perltest/gogo";
&gotest($file);
 
[macg@localhost perltest]$ ls -F
file1.pl  gogo  newdir/  newtest  test  testdir/  tip.pl*
[macg@localhost perltest]$ ls testdir
file1.pl  test1

[macg@localhost perltest]$ ./tip.pl
good
$line is :I WANTWANT TO go to NY. And I also wWant to be DC


        不用全路径名,而require文件又不在当前路径下,怎么办?  ----@INC
[macg@localhost perltest]$ vi tip.pl

#!/usr/bin/perl

require ("file1.pl");

$file="/home/macg/perltest/gogo";
&gotest($file);
[macg@localhost perltest]$ ./tip.pl
Can't locate file1.pl in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.4/i386-linux-thread-multi at ./tip.pl line 3.
把file1.pl所在目录放入@INC系统变量中
[macg@localhost perltest]$ vi tip.pl
#!/usr/bin/perl

unshift (@INC, "/home/macg/perltest/testdir");
require ("file1.pl");

$file="/home/macg/perltest/gogo";
&gotest($file);
[macg@localhost perltest]$ ./tip.pl
good
$line is :I WANTWANT TO go to NY. And I also wWant to be DC


      @INC
[macg@localhost perltest]$ vi tip.pl

@arraytest=qq(hello "test" world);
#!/usr/bin/perl
foreach  (@INC) {
 print $_,"\n";
}
[macg@localhost perltest]$ ./tip.pl
/usr/lib/perl5/site_perl/5.8.6
/usr/lib/perl5/site_perl/5.8.5
/usr/lib/perl5/site_perl/5.8.4
/usr/lib/perl5/site_perl/5.8.3
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.6
/usr/lib/perl5/vendor_perl/5.8.5
/usr/lib/perl5/vendor_perl/5.8.4
/usr/lib/perl5/vendor_perl/5.8.3
/usr/lib/perl5/vendor_perl
/usr/lib/perl5/5.8.6/i386-linux-thread-multi
/usr/lib/perl5/5.8.6


        修改@INC
[macg@localhost perltest]$ vi tip.pl

#!/usr/bin/perl
$path1="/home/macg";
$path2="/home/macg/www";
push(@INC,$path1);      放尾部
unshift(@INC,$path2);  放头部
foreach  (@INC) {
 print $_,"\n";
[macg@localhost perltest]$ ./tip.pl
/home/macg/www
/usr/lib/perl5/vendor_perl/5.8.6
/usr/lib/perl5/vendor_perl/5.8.5
/usr/lib/perl5/vendor_perl/5.8.4
/usr/lib/perl5/vendor_perl/5.8.3
/usr/lib/perl5/vendor_perl
/usr/lib/perl5/5.8.6
.
/home/macg 
   
        push 或unshift @INC只对当前文件执行时刻有效,没有global效果
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值