第10章 包 名字空间,变量和函数
2015-10-06 21:00
232 查看
名字空间,变量和函数就不会把别人的变量和函数搞砸了,反之亦然,名字空间有点像你的家,你的家里想怎么乱都行,
只要你保持你的外部界面对其他公民来说是适度文明就可以了。
在Perl里,一个名字空间叫一个包,包提供了基本的制作块,在它上面构造更高级的概念,比如模块和类等。
在OO的说法中,每个对象都属于一个叫做类的组。在Perl里,类和包以及模块之间的关系是如此密切,
以至于需要新手经常认为它们是客户呼唤的,典型的类是用一个定义了与该类同名的包名字的模块实现的。
Perl里的面向对象的编程是通过引用来实现的,这些引用的引用物知道它们属于哪些类。
10.1 符号表
一个包的内容总体在一起称作符号表,符号表都存储在一个散列里,这个散列的名字和该包的名字相同,
但是后面附加了两个冒号。因此main符号表的名字是%main::.
因为碰巧也是缺省的包,Perl 把%::当做%main::的缩写。
因为包是散列,因此你可以找出该包的键字然后获取所有包中的变量。因此该散列的数值都
是类型团,你可以用好几种方法解引用。比如:
foreach symname(sortkeyslocal∗sym=symname (sort keys %main::) {
local *sym = main::{symname};
print “\$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.plforeach cat a2.pl
foreach key (keys %main::)
{print “$key=>key => main::{$key}\n”;}
[oracle@jhoa 2]perla2.pl perl a2.pl
/ => *main::/
stderr=>∗main::stderrstderr => *main::stderr
key => *main::key
utf8::=>∗main::utf8::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.plkey (keys %::)
{print “\$$key => $main::{$key}\n”;}
[root@master Webqq]# perl t26.pl
version:: => *main::version::
/=>∗main::// => *main::/
stderr => *main::stderr
$_
只要你保持你的外部界面对其他公民来说是适度文明就可以了。
在Perl里,一个名字空间叫一个包,包提供了基本的制作块,在它上面构造更高级的概念,比如模块和类等。
在OO的说法中,每个对象都属于一个叫做类的组。在Perl里,类和包以及模块之间的关系是如此密切,
以至于需要新手经常认为它们是客户呼唤的,典型的类是用一个定义了与该类同名的包名字的模块实现的。
Perl里的面向对象的编程是通过引用来实现的,这些引用的引用物知道它们属于哪些类。
10.1 符号表
一个包的内容总体在一起称作符号表,符号表都存储在一个散列里,这个散列的名字和该包的名字相同,
但是后面附加了两个冒号。因此main符号表的名字是%main::.
因为碰巧也是缺省的包,Perl 把%::当做%main::的缩写。
因为包是散列,因此你可以找出该包的键字然后获取所有包中的变量。因此该散列的数值都
是类型团,你可以用好几种方法解引用。比如:
foreach symname(sortkeyslocal∗sym=symname (sort keys %main::) {
local *sym = main::{symname};
print “\$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.plforeach cat a2.pl
foreach key (keys %main::)
{print “$key=>key => main::{$key}\n”;}
[oracle@jhoa 2]perla2.pl perl a2.pl
/ => *main::/
stderr=>∗main::stderrstderr => *main::stderr
key => *main::key
utf8::=>∗main::utf8::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.plkey (keys %::)
{print “\$$key => $main::{$key}\n”;}
[root@master Webqq]# perl t26.pl
version:: => *main::version::
/=>∗main::// => *main::/
stderr => *main::stderr
$_
相关文章推荐
- 哈夫曼树
- 二叉树的层次遍历
- Swift学习笔记21——错误处理(Error Handling)
- 滴滴打车And 360 校招 2016 在线笔试(三)
- 《UNIX网络编程》中的unp.h和config.h
- 计算机网络—常考内容
- 【Linux】文件结构
- 【总结】用户权限设置和进程权限提升
- android 常用时间格式转换代码大全
- 关于UICollectionView在MRC下的纯代码实现之一(在UIViewController中实现)
- ksh 格式化输出
- 黑马程序员——JAVA基础--面向对象思想
- EntityFramework走马观花之 CRUD(中)
- HDU 3695 Computer Virus on Planet Pandora
- 强大的grep用法详解:grep与正则表达式
- 数据库远程连接权限配置
- 如何进行并行编程:从并行矩阵运算开始
- 条款20:在传递对象的时候尽量用reference-to-constent来代替,pass-by-value
- NYoj拦截导弹(动态规划-最长上升子序列变形)
- struts的国际化