perl的一些概念的理解
时间:2011-04-05 来源:konggang
1.为什么perl的库有的是.pl的有的是.pm的?
答:.pl是一种比较老的形式的库的形式,.pm是一种新的形式。在导入这些库的时候,.pl只能用require导入,而.pm可以用require和use两种方式导入。
2.require 和use又什么区别?
答:require和use的共同目的都是用来装载库的,他们有点像c语言的动态装载和静态链接之间的关系,require动态装载库,也就是在perl程序运行时才装载perl库文件,use可以理解为静态连接,也就是perl脚本在编译的时候就装载了perl库。require可以装载.pm和.pl两种库,但use只能装载.pm库。use装载.pm 的时候,会执行.pm库里面package的export方法来导入库的符号表,这样就可以不用指定package的名字,而直接调用package的方法。
3.package 和module是什么关系?
答:package实际上是名字空间,而module实际上是一个抽象的概念,表示提供一种功能的代码集合,一个module通常是保存在一个.pm文件里面的。一个module可以包含一个或多个package,但为了编程的方便,通常一个module文件中只包含一个package,为什么这样说了,因为在导入模块的时候,use的参数实际上是文件名,如果这个文件名指定的模块中有几个package,而这些package都继承了export class到处符号表,那么只有和文件名相同的package的export方法能够被use调用,也就是说只有和文件名相同的package的符号表才能被导出来。所以最好一个模块文件只有一个package,而且这个package要和文件名一样。
4。my 和 our的区别
答:our很简单,它的意义就有点像c语言的external的变量,这个变量的是放在程序的堆空间里,也就是说生存周期和程序是一样的。our的变量是放在package的符号表里面的,也就是说可以被::操作符或者export方法导出。my变量就复杂很多,如果my变量是定义在package的最上层,也就是不再任何{}块里面,那么它就有点象c语言的static变量,它的地址是分配在堆里面,生存周期也是和程序一样,但它的符号没有放到package的符号表里面,所以不能用::或export导出。如果my变量是定义在{}里面,那么它的地址就在堆栈里面,{}结束以后,就会被释放。
5。perl实现面对对象的方式是怎么样的
答:基本上是package+ISA数组的方式。package实现了类的封装,ISA实现了类的继承