第10章 包 名字空间,变量和函数

来源:互联网 发布:淘宝松下军用笔记本 编辑:程序博客网 时间:2024/05/01 07:41

名字空间,变量和函数就不会把别人的变量和函数搞砸了,反之亦然,名字空间有点像你的家,你的家里想怎么乱都行,

只要你保持你的外部界面对其他公民来说是适度文明就可以了。

在Perl里,一个名字空间叫一个包,包提供了基本的制作块,在它上面构造更高级的概念,比如模块和类等。

在OO的说法中,每个对象都属于一个叫做类的组。在Perl里,类和包以及模块之间的关系是如此密切,

以至于需要新手经常认为它们是客户呼唤的,典型的类是用一个定义了与该类同名的包名字的模块实现的。

Perl里的面向对象的编程是通过引用来实现的,这些引用的引用物知道它们属于哪些类。

10.1 符号表

一个包的内容总体在一起称作符号表,符号表都存储在一个散列里,这个散列的名字和该包的名字相同,

但是后面附加了两个冒号。因此main符号表的名字是%main::.

因为碰巧也是缺省的包,Perl 把%::当做%main::的缩写。

因为包是散列,因此你可以找出该包的键字然后获取所有包中的变量。因此该散列的数值都
是类型团,你可以用好几种方法解引用。比如:
foreach symname(sortkeyslocalsym=main::{symname};  
print “\$
symname is defined\n" if defined $sym; ##解引用标量

print “\@$symname is nonnull\n” if @sym; ##解引用数组

print “\%$symname is nonnull\n” if %sym; ##解引用hash
}

在Perl里,一个名字空间叫一个包。

在面向对象里,每个对象都属于一个叫做类的组。

Perl里面向对象的编程是通过引用来实现的,

一个独立命名空间中的变量就是对象的数据 函数就是对象的方法,

所以perl里只需要包package的观念就可以实现 OO了 不需要特别的类Class,

你把一个package隔离的命名空间叫做“类”也可以 效果类似

所谓的类 对象 只是你在单独命名空间中操作的变量和函数 这样应该好理解, 不要再去想其他语言的Class之类的东西 perl没

朝着生态编程的第一步是: 不要在公园里乱丢垃圾,

当你写一段代码时,考虑一下给这些代码自己的名字空间,这样你的变量和函数就不会把别人的变量和函数搞砸了,

反之亦然。名字空间有点像你的家,你的家是想怎么乱都行,只要你保持你的外部界面对其它公民说是适度文明就可以了。

在perl里,一个名字空间叫做一个包。包提供了基本的制作块,在他上面构造更高级的概念,比如模块和类等。

典型的类是用一个定了与该类同名的包名字的模块实现的

10.1 符号表

main包内容;

[oracle@jhoa 2]cata2.plforeachkey (keys %main::)
{print “$key=>main::{$key}\n”;}

[oracle@jhoa 2]perla2.pl/ => *main::/
stderr=>main::stderrkey => *main::key
utf8::=>main::utf8::” => *main::”
$CORE:: => *main::CORE::

一个包的内容总体在一起称做符号表,符号表都存储在一个散列里,这个散列的名字和该包名字相同,

单手后面附加了两个冒号。因此main符号表的名字是%main::. 因为main碰巧也是缺省的包,

perl 把%::, 当作%main::的缩写:

[root@master Webqq]# cat t26.pl
foreach key (keys %::)  
 {print “\$$key =>   $main::{$key}\n”;}  
[root@master Webqq]# perl t26.pl
version:: => *main::version::
/=>main::/stderr => *main::stderr
$_

0 0