加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl--require(@INC)

发布时间:2020-12-16 00:10:01 所属栏目:大数据 来源:网络整理
导读:perl的包含文件 require ("myfile.pl"); 基本的包含文件全过程 建立一个include文件,就按整个的perl script文件格式建立,文件中写sub.包或模块中,必须有reutrn 1; [macg@localhost perltest]$ vi file1.pl #!/usr/bin/perl sub gotest{ my(@tmp)=@_; open

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

基本的包含文件全过程

  • 建立一个include文件,就按整个的perl script文件格式建立,文件中写sub.包或模块中,必须有reutrn 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);
}
  • 主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

}

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效果

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读