2009年4月14日星期二

perl 参数的 I 和 i

perl 参数的 i 和 I 都可以指定路径
其中 I 指定的是文件夹
i 指定的是 pm 文件

比如 /Test 文件夹下有 Teacher.pl 和 Boy.pm 两个文件

../
./
|-Test/
  |-Boy.pm
  |-Teacher.pl

其中 Teacher.pl 调用 Boy.pm 代码
代码如下:


#!/cygdrive/c/Perl/bin/perl 

package Test::Teacher;
use strict;
use warnings;

use Test::Boy;

my @eth = Test::Boy::getEverything();

foreach(@eth){
print "out: ".$_."\n";
}
#!/cygdrive/c/Perl/bin/perl 
package Test::Boy;
use strict;
use warnings;

my @everything = 1 .. 9;

sub getEverything{
@everything;
}
1 假设当前路径为 /cygdrive/e/pl可以使用
perl Test/Teacher.pl
注:perl 会从 ./ 下寻找 Test::Boy.pm,也就是相当于 -iTest::Boy 参数

2 假设当前路径为 /cygdrive/e/pl/Test 时
则需要使用
perl -I../ Teacher.pl
注:perl 会从 ../ 寻找 Test::Boy.pm
use Foo::Bar 意味着什么
   ——摘自 http://wiki.perlchina.org/Simple_module_tutorial

use Foo::Bar
并不意味着在 @INC 的目录中寻找一个叫做Foo::Bar.pm的模块文件。
它的意思是在@INC的目录中寻找一个叫做‘Foo’的“子目录”,
然后在其中找一个叫做“Bar.pm”的“模块”。
现在,如果我们成功"use"了一个模块,
那么我们就可以通过完整的包路径语法
&PACKAGE::FUNCTION
使用这个模块中的所有函数。
当我们说&Foo::Bar::some_func的时候,
我们指的是“包的名字”而不是那个在use中曾使用的包含路径的文件名。
这会允许你可以在一个use过的文件中包含很多包名字。
实际使用中这些名字通常是相同的。


另外,假设 Teacher.pl 在 Test 文件夹同级

../
./
|test/
| |-Boy.pm
|-Teacher.pl

如果要调用 Boy.pm,也要在 Boy.pm 开头的 package 生命中写清
Test::Boy
即:pm 一定要放在 pm 内与包路径相同的文件夹下,并在文件夹外层调用

没有评论:

zzzzZZZZ

zzzzZZZZ