perl require @INC
来源:互联网 发布:淘宝店铺简介在哪里看 编辑:程序博客网 时间:2024/06/04 18:08
perl的包含文件
require ("myfile.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);
}
#!/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
如果perl默认模块目录中没有strict模块或者Data::Dumper模块,则直接调用perl ./test.pl可能会报错,@INC中目录里可能没有此处调用的模块。
require ("myfile.pl");
基本的包含文件全过程
- 建立一个include文件,就按整个的perl script文件格式建立,文件中写sub
#!/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;
close(MYFILE);
}
- 主perl文件require上边的包含文件,引用定义在包含文件中的sub
#!/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++) {
file1.pl did not return a true value at ./tip.pl line 3.
上面哪里错了? 包含文件,必须return一个1
#!/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;
close(MYFILE);
}
1;
good
$line is :I WANTWANT TO go to NY. And I also wWant to be DC.
变量$_的值即作为文件名传递给require
require ("testdir/file1.pl");
$file="/home/macg/perltest/gogo";
&gotest($file);
file1.pl
[macg@localhost perltest]$ ls testdir
file1.pl
[macg@localhost perltest]$ ./tip.pl
good
$line is :I WANTWANT TO go to NY. And I also wWant to be DC
不用全路径名,而require文件又不在当前路径下,怎么办?
[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
}
/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
}
/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效果。
以下为我自己根据项目中实践结果添加。
perl参数-I可以加入模块路径,如文件test.pl内容如下:
#! /usr/bin/perl -wuse strict;use Data::Dumper;print "hello world!\n";
如果perl默认模块目录中没有strict模块或者Data::Dumper模块,则直接调用perl ./test.pl可能会报错,@INC中目录里可能没有此处调用的模块。
但如果目录/home/usr_name/lib_test中有这两个模块,我们可以这样调用:perl -I/home/usr_name/lib_test ./test.pl就可以成功。
0 0
- perl require @INC
- Perl 之 use(), require(), do(), %INC and @INC
- Perl inc设置
- perl的INC设置
- perl unshift @INC
- perl的INC设置
- [转]perl的INC设置
- [转]perl的INC设置
- perl的INC设置分析
- perl include 文件--------require
- perl的use和require
- perl的USE和require
- Perl use和require区别
- Resove the problem of @INC of perl.
- freebsd手工安装perl @INC错误
- perl中use 和 require的区别
- perl中use和require对比
- perl中use和require对比(转)
- java 彻底理解 byte char short int float long double (转)
- C#Set/Get方法
- 我第一次做网站时的有用的学习资料
- 组合数学几种“数”
- 第17周项目6-学生成绩统计(1)
- perl require @INC
- 第17周 项目6-1 统计学生成绩
- oracle connection 有时能取到有时候又取不到
- break的运用
- 电子邮件的信头信息分析
- http -> https
- CTP C++接口试用
- Less入门一 概述 我的第一个less
- 逆波兰表达式