perl学习笔记5 z

52 篇文章 0 订阅

1.  递归

略 

2.  作用域规则:全局、字典和动态的

Ø         标识符的“作用域”是指程序中一个特定的部分。只有在这个部分中,才可对此标识符进行引用。有的标识符可在程序中的任何地方引用;另一些则只能在有限的部分才能引用。

Ø         字典作用域变量,只有在定义他的那个代码快中才能使用它。

Ø         动态作用域变量,只有从它创建位置开始,一直到当前块结束之前,才可使用它。

Ø         使用our定义全局变量;my定义字典变量;local定义动态变量。

Ø         在子程序中,所有字典和动态变量肯定会“覆盖”同名的全局变量,但不是删除。

Ø         在子程序中定义的字典变量,只能在这个子程序内访问,如果在子程序中存在另一个子程序,那么这个子程序将不能使用字典变量。但子程序中定义的动态变量,却可以被使用。

Ø         假如一个子程序要求使用来自另一个子程序的变量来完成任务,那么应把该变量作为一个参数明确的传递给子程序,而不是把它声明成全局变量或动态变量。

3.  名字空间、包和模块

Perl利用“包”或“名字空间”来决定变量和子程序标识符的可访问性。也可用包来访问在其他名为“模块”的文件中定义的标识符。

在默认情况下,perl源码文件中的全局标识符(全局变量和子程序)属于main包的符号表的一部分。

Ø         可以使用package语句对当前包进行修改。

Ø         使用require关键字可以向程序添加一个新的包

Ø         Require关键字首先在当前目录中查找新添加的语言包,然后在由数组@INC指定的目录中查找。

Ø         完整的变量名是由包名、::和变量名组成的。如

$FirstPackage :: variable

 

模块

模块本质上就是一种“包”,它使程序员能更全面的控制模块用户对那个模块的包内的标识符进行引用。模块的优点在于:程序员可设定一个标识符无论如何都可由模块用户使用——好像这个标识符本来就是在用户的程序中定义的那样。便可在不采用完整形式的前提下,使用其他地方的标识符。

Ø         Userequire语句类似,主要的区别在于:use是在编译时导入模块和包的,require是在执行时导入的。如在编译时导入,perl保证在程序执行前,便可让包进入可用状态,否则的话,可能不能发现包的缺失。

Ø         在基本的“包”的基础上,模块还提出了额外的几项要求。首先,文件必须有一个.pm扩展名。Require这个关键字允许指定其他扩展名,如.pl

Ø         为了能够从一个模块导出标识符,以便在另一个文件的名字空间里使用。这样在其他文件使用标识符的时候,便不再需要指定完整形式的名字。为了达到这个目的,必须把模块设置成为一个Exporter模块。这个Perl标准模块提供了相应的功能,可导出标识符,以便在其他文件中使用。

use Exporter;

                     它的作用就是指出当前模块使用Exporter模块。

                                   our  @ISA = qw ( Exporter );

它的作用是指出在特殊的内建数组@ISA内,包含了Exporter。换言之,当前模块“就是”(ISA)一个Exporter。这样一来,我们的模块就具有了Exporter的特性,允许把名字从一个模块空间导入其他名字空间。

现在,模块已具有了输出标识符的能力。随后,必须指定要导出的标识符。

              Our @EXPORT =  qw( @array  &greeting );

它可把项目添加到特殊的内建数组 @EXPORT中。使用这个模块的任何程序都可以直接使用数组@array和子程序greeting内的标识符

Ø         使用use导入的模块,在模块的末尾必须增加如下语句

return 1;

                     表示模块导入完成。模块的最后一条可执行语句必须是返回真值的一个语句。

Ø         use语句的其他特点:

1.         use后面加上一个版本号,如下所示:

Use v 5.6.0

那么prel会把指定的版本号同系统中安装的perl的版本号对比,假如指定的版本号大于当前的版本号,便会产生一个错误。

 

2.         除了能够导入一个完整的模块外,perl还允许导入模块的不同部分。假如为use提供了一个参数列表,那么它只会从模块里导入特定的项目。如:

Use  FirstModule qw( @array );

上述命令将只导入@array数组。

3.         use关键字还有一个搭档—no关键字。利用no关键字,程序可明确规定不从一个名字空间里导入指定项目。语法等价于use

4.  预编译指令

预编译指令(Pragmas)是指一种特殊的语句,编译器用它来设置自己的编译选项。

Ø         use strict语句:

use strict语句可强迫程序员把所有变量都声明为包变量或字典作用域变量。另外,他也强迫程序员用引号把所有字串封闭起来,而且必须明确地调用每一个子程序。

可以向 strict传递一些特殊的“标记”参数,从而让perl知道应该去检查什么,其中两个标记是‘vars’和‘subs’。

比如,vars标记要求perl确保每个变量名都采用完整形式—同时包含它的包名。

比如,subs标记要求perl拒绝用一个裸字调用子程序。

 

一个变量可以通过4种途径满足use strict的要求。首先,随my关键字定义的变量处在字典作用域中,可在定义他的那个块里用他的短名字来进行引用。第二,随our关键字定义的包变量放置在符号表中。在定义这些变量的那个包的范围内,可用它的短名字来进行访问。而在包外,就必须用完整形式的名字来访问他们。第三,所有情况下都可利用完整形式的名字来访问变量—包括定义他们的那个包中。最后,一个程序可指定一个use vars语句,在后面跟随一个变量名列表,如下所示:

              use  vars  qw( 变量1  变量2  变量3)

 

Ø         use  warnings语句

这个预编译命令用于警告用户一些可能出现的打字错误、使用了未初始化变量以及代码里其他潜在的问题。

Ø         也可以使用no命令关闭warningsstrict。例如使用如下命令:

no  strict;

               记住,一旦进行了这样的设置,那么屏蔽效果会一直持续到代码块末尾解除—或者直接使用use strict重新激活。

Ø         use constant语句

使用use constant语句可以创建一个固定标量变量,作为一个常量使用。

Ø         use diagnostice语句

它可以显示更加详细的错误提示信息。

Ø         use integer语句

告诉程序使用整数运算方式来执行所有的数学运算。


<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值