perl模块要写全路径?
比如说在linux环境下,@INC=/home在home目录下创建a目录a目录下有Test.pl,a目录下有b目录有个A.pm在Test.pl中:usea::b::A;然...
比如说在linux环境下,@INC=/home
在home目录下创建a目录
a目录下有Test.pl,a目录下有b目录有个A.pm
在Test.pl中:
use a::b::A;
然后my $a = a::b::A->new();
这里必须写全路径,为啥不能像java一样import后可以直接简写A->new(),
有谁知道当时这样设计的考虑么?
ps:说规定之类的就请不要回答了,谢谢! 展开
在home目录下创建a目录
a目录下有Test.pl,a目录下有b目录有个A.pm
在Test.pl中:
use a::b::A;
然后my $a = a::b::A->new();
这里必须写全路径,为啥不能像java一样import后可以直接简写A->new(),
有谁知道当时这样设计的考虑么?
ps:说规定之类的就请不要回答了,谢谢! 展开
2个回答
展开全部
为甚麼 java 要写成SomeClass x = new SomeClass();
得把 Class 写两遍, 而不能像 perl, $x = new SomeClass() ?
为甚麼韩文的句式是主词-副词-动词, 而不像英文的句式: 主词-动词-副词
语法这问题, 没甚麼好比较的... 不过从结构而言, 可以解说一些.
1. 简写, 可以的. 你设计下就好
#MyClass.pm
package A::B::MyClass;
require Exporter;
our @ISA = qw/Exporter/;
our @EXPORT = qw/MyClass/;
sub MyClass{ bless{}, shift }
sub hi{ print "Hi @_" }
1;
#main
use A::B::MyClass;
$obj = MyClass(); # 连 new 也省掉了
$obj -> hi ( 'You!' ) ; # prints 'Hi You!'
2. Perl 从来都不是 OO 语言, 只不过她能做 OO 的效果
所以, perl 里面从来都没有 new 这个指令, new 是你自己写出来的
#MyClass.pm
package A::B::MyClass;
sub new { bless {}, shift }
1;
# main
use A::B::MyClass;
$obj = new A::B::MyClass();
perl 的 new 是这样来的. 因为 perl 不是 OO 语言, 所以, new 其实只是一个 sub, 你叫甚麼其实都可以, 这个 sub 在 bless() 了之後会带给你一个 ref(erence). Perl 的所谓 OO, 其呼叫都是写成 -> , 如 C 那样, 这其实只是一个指针, 一个指向 code block 的指针. 也因为用到的都是指针, 所以, 在建构时, 就得说明全路径. 否则 A module 一个 new, B module 一个 new, 那就无从识别该指各那里了.
如果你问当初设计时的考虑, 那可以说 Perl 本来就只是设计来做文字处理, 而到了後来才考虑加入 更 OO 的风格 -- 只是风格而已了.
得把 Class 写两遍, 而不能像 perl, $x = new SomeClass() ?
为甚麼韩文的句式是主词-副词-动词, 而不像英文的句式: 主词-动词-副词
语法这问题, 没甚麼好比较的... 不过从结构而言, 可以解说一些.
1. 简写, 可以的. 你设计下就好
#MyClass.pm
package A::B::MyClass;
require Exporter;
our @ISA = qw/Exporter/;
our @EXPORT = qw/MyClass/;
sub MyClass{ bless{}, shift }
sub hi{ print "Hi @_" }
1;
#main
use A::B::MyClass;
$obj = MyClass(); # 连 new 也省掉了
$obj -> hi ( 'You!' ) ; # prints 'Hi You!'
2. Perl 从来都不是 OO 语言, 只不过她能做 OO 的效果
所以, perl 里面从来都没有 new 这个指令, new 是你自己写出来的
#MyClass.pm
package A::B::MyClass;
sub new { bless {}, shift }
1;
# main
use A::B::MyClass;
$obj = new A::B::MyClass();
perl 的 new 是这样来的. 因为 perl 不是 OO 语言, 所以, new 其实只是一个 sub, 你叫甚麼其实都可以, 这个 sub 在 bless() 了之後会带给你一个 ref(erence). Perl 的所谓 OO, 其呼叫都是写成 -> , 如 C 那样, 这其实只是一个指针, 一个指向 code block 的指针. 也因为用到的都是指针, 所以, 在建构时, 就得说明全路径. 否则 A module 一个 new, B module 一个 new, 那就无从识别该指各那里了.
如果你问当初设计时的考虑, 那可以说 Perl 本来就只是设计来做文字处理, 而到了後来才考虑加入 更 OO 的风格 -- 只是风格而已了.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询