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:说规定之类的就请不要回答了,谢谢!
展开
 我来答
百度网友c9e795dda
2013-04-18 · TA获得超过5167个赞
知道大有可为答主
回答量:1128
采纳率:0%
帮助的人:1161万
展开全部
为甚麼 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 的风格 -- 只是风格而已了.
古月水Iz
2013-05-02 · 超过25用户采纳过TA的回答
知道答主
回答量:192
采纳率:0%
帮助的人:68万
展开全部
直接用use lib “/home/a/b";
再直接用A模块就好。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式