频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

Perl 的变量

作者: AKA 系列讲座 出处:AKA主页  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2005-09-08 16:37
关 键 词:Perl
阅读提示:本文介绍Perl的基础知识之一:变量,包括简单变量、数组、关联数组和各种运算符汇总四部分。

1 简单变量

Perl 的 Hello World 是怎么写的呢?请看下面的程序:

#!/usr/bin/perl
print "Hello World"

这个程序和前面 BASH 的 Hello World 程序几乎相同,只是第一行换成了 #!/usr/bin/perl ,还有显示的时候用的是 print,而不是 echo。有了前面 BASH 基础和 C 语言的基础,许多 Perl 的知识可以很容易的就看懂和记住,下面我们就从简单变量开始。

简单变量是标量,是 Perl 处理的最简单的数据类型。标量可以是数字(如2,3或2.5e6), 也可以是字符串。Perl 中的标量变量以美元符号 "$" 和一个字母开始,后面可以跟字母、数字和下划线,Perl 的变量区分大小写,因此 $a 和 $A 是代表不同的变量。和 BASH 中不同的是 Perl 语言中的变量即使是在最初赋值的时候也必须在变量前面加上 "$" 符号,而且 Perl 不要求 "=" 左右必须没有空格。

虽然 Perl 中和 BASH 一样,没有变量类型的概念,我们还是可以把简单变量分为数值型和字符串型来理解。在赋值时,如果是赋值成字符串,则需要在字符串两边加上双引号(或单引号);如果是数值则就不用了,而且 Perl 中还可以接受8/16(以0开头/以0x或0X开头)进制的整数,还可以接受如 2.5,-6.3e5,-2.3-e6 这样的浮点数。关于简单变量举例如下:

$a=23;
$a = "hello";
$a = 010;(表示十进制的 8)
$a = 0x10;
$a = 0X10;

和 C 语言类似,在双引号之中可以用反斜杠表示一些特殊转义字符,见下表:

结 构 含 义
\n 换行
\r 回车
\t 水平置表符
\f 换页符
\b 退格
\v 垂直置表符
\a 响铃
\e Esc
\007 任一八进制ASCII值(这里007表示bell)
\x7f 任一十六进制ASCII值
\cC 任一“控制”字符
\\ 反斜杠
\" 双引号
\l 下一字母小写
\L 以后所有字母小写直到\E
\u 下一字母大写
\U 以后所有字母大写直到\E
\E 结束\L和\U

另外在 Perl 语言里,我们常会看到 my 这样的变量定义,如:

my $a = "local var";

这表示 $a 是一个程序块的局部变量。

2  数组

数组是标量数据的有序列表。数组可以含从 0 个元素大小 直到 你计算机内存可以支持的大小。数组用括号内以逗号分隔的一系列元素来表示。如:

@a=(1,2,3,4,5)
@a=("aka",1974,173.5)

在 Perl 中对数组变量和前面的简单变量的存储是在不同的空间中,对数组的引用需要在变量前加 "@" 符号。

数组的赋值由下面几种用法需要注意:

@a=(1,2,3); # 初始化一个整数数组。
$a=@a; # 这里表示将数组 @a 的长度赋给 $a,此时 $a 和 @a 不是一个变量,他们不在一个存储空间里,引用时不会发生混淆。
($a, $b, $c)=(1,2,3); # 这里表示将 1 赋给 $a;2 赋给 $b;3 赋给 $c;
@a=("a","b","c"); # 初始化一个字符串数组。
@b=@a; # 表示把数组 @a 拷贝一份给数组 @b,@a 与 @b 不享有共同的存储空间,他们彼此分离。
@c=(@a,@b); # 表示数组 @c 拥有 @a 和 @b 的所有元素,仍然是一维数组,而不是发生了嵌套。
($a,@b)=@a; # 表示变量 $a 等于数组 @a 的第一个元素,@b 拷贝了 @a 的剩余元素。
@a=(); # 表示产生或清空一个数组。
($a)=@b; 变量 $a 等于数组 @b 的第一个元素的值。
@b[i] 引用数组 @b 的第 i 个元素。
$b[i] 如果 b 表示一个数组的话,其含义同上。
$a[i,j]=[x,y] 将数组 @a 的第 i 和第 j 个元素赋值为 x 和 y。
@a[i,j]=@a[j,i] 将数组 @a 的第 i 和第 j 个元素的值互相交换。

3    关联数组

关联数组是 Perl 语言中特有的一种数据结构,是一个功能强大的数组,他与普通数组的不同在于关联数组不是通过整数下标来索引,而是通过“键值”进行索引。使用关联数组需要在变量前面加上 "%" 号,关联数组的格式如:

ARRAY=(key1,value1,key2,value2,key3,value3);

上面每个 key 都对应着一个 value。关联数组是存在在另外一个存储空间中,不和简单变量以及数组相混淆。

对关联数组的操作有如下规则:

  1. 在关联数组中增加、更改一对数据:ARRAY={key}=value; 在关联数组ARRAY中加上一对 key-value,要在关联数组名称前加上 $ 号,而且 key 的名称要在 {} 符号之间,最后再指定 key 所对应的 value 值。如果在这个关联数组中已经有这个 key 了.就会更改这个 key 所对应的 value 。
  2. keys(%array) 操作符可生成由关联数组 %array 中的所有当前关键字组成的列表。即返回奇数号元素(第1,3,5,7...个)的列表。
  3. values(%array) 操作符返回由关联数组 %array 中所有当前值组成的列表,即返回偶数个列表。
  4. echo(%array) 操作符返回由 关键字/值对 构成的元素对列表。对同一数组再进行此操作时返回下一对值直至结束。若没有更多的对时,echo() 返回空表。 (这在打印全部列表中很有用)
  5. 删除一对在关联数组中的数据:delete $ARRAY{key}; delete 是 Perl 所提供的函数,作用是删除关联数组中的一个 key 以及这个 key 所对应的 value。使用方法是在 delete 函数之后,指定关联数组中要删除的 key 名称。

下面是一些关联数组操作的例子:

%fred=(one,"aka",two,"free"); $a=$fred{one}; # $a等于"aka"
$b=$fred{two}; # $b等于"free"
$fred{two}="yes"; # %fred=(one,"aka",two,"yes")
@index=keys(%fred); # @index=(one,two)
@content=values(%fred); # @content=("aka","yes")
($index,$content)=echo(%fred); # 此时 $index 的值为 one,$content 的值为 "aka",再执行一次 $index 为值为 two,$name 的值为 "yes"
@a=%fred; # 将关联数组 fred 指定给数组 a,这时 @a=(one,"aka",two,"yes")
%b=@a; # 将数组 a 指定给关联数组 b,这时 %b=(one,"aka",two,"yes")
delete $fred{one}; # 将关联数组中 key 值为 one 的一对 key-value 删除,这时 %fred=(two,"yes")
%x=(); # 把 %x 关联数组置空

4    各种运算符号汇总

赋值(Assignment)运算符
算术(Arithmetic)运算符
数值(Numeric Values)关系运算符
字符串(String Values)关系运算符
逻辑(Logical)运算
其它常用的运算符
常用的文件数据(File Test)运算符

赋值(Assignment)运算符


符号 范例 说明
= $x=$y; 将$x的值指派给$y
+= $x+=$y;
$x=$x+$y;
将$x加$y之后再指派给$x
-= $x-=$y;
$x=$x-$y;
将$x减$y之后再指派给$x
*= $x*=$y;
$x=$x*$y;
将$x乘$y之后再指派给$x
/= $x/=$y;
$x=$x/$y;
求出$x除以$y之后的商数,再指派给$x
**= $x**=$y;
$x=$x**$y;
将$x乘上$y次方之后再指派给$x
%= $x%=$y;
$x=$x%$y;
求出$x除以$y的余数以后,再指派给$x
.= $str1.=$str2;
$str1=$str1.$str2;
将$str1这个字符串再加上$str2这个字符串之后,再指派给$str1这个字符串
x= $strx=$y;
$str=$strx$y;
重复$str字符串$y次,并反结果指派给str这个字符串

算术(Arithmetic)运算符
 

 
符号 范例 说明
+ $z=$x+$y 将$x和$y相加之后,再将结果指派给$z
- $z=$x-$y 将$x减掉$y之后,再将结果指派给$z
* $z=$x*$y 将$x和$y相乘之后,再将结果指派给$z
/ $z=$x/$y 将$x除以$y之后,再将商数指派给$z
% $z=$x%$y 将$x除以$y之后,再将余数指派给$z
** $z=$x**$y 将$x乘以$y之后,再将结果指派给$z
++ $x++;++$x; 如同$x=$x++1;将$x加一以后再将结果指派给$x
-- $x--;--$x; 如同$x=$x-1;将$x减一以后再将结果指派给$x
. $z=$x.$y; 将$x字符串和$y字符串连接之后,再将结果指派给$z

数值(Numeric Values)关系运算符


符号 范例 说明
> $x>$y 如果$x大于$y,返回1的值,否则返回0
>= $x>=$y 如果$x大于等于$y,返回1的值,否则返回0
< $x<$y 如果$x小于$y,返回1的值,否则返回0
<= $x<=$y 如果$x小于等于$y,返回1的值,否则返回0
== $x==$y 如果$x等于$y,返回1的值,否则返回0
!= $x!=$y 如果$x不等于$y,返回1的值,否则返回0
<=> $x<=>$y 如果$x大于$y,返回1的值,如果$x等于$y,否则返回0;&127;如果 $x小于$y,则返回-1的值

字符串(String Values)关系运算符


符号 范例 说明
gt $str1 gt $str2 如果$str1大于$str2,返回1的值,否则返回0
ge $str1 ge $str2 如果$str1大于等于$str2,返回1的值,否则返回0
lt $str1 lt $str2 如果$str1小于$str2,返回1的值,否则返回0
le $str1 le $str2 如果$str1小于等于$str2,返回1的值,否则返回0
eq $str1 ep $str2 如果$str1等于$str2,返回1的值,否则返回0
ne $str1 ne $str2 如果$str1不等于$str2,返回1的值,否则返回0
cmp $str1 cmp $str2 如果$str1大于$str2,返回1的值,如果$str1等于$str2,返回0,如果$str1小于$str2,则返回-1的值
逻辑(Logical)运算

1) $x && $y(And)

$x    $y    结果

真(True) 真(True) 真(True)

真(True) 假(False) 真(True)

假(False) 真(True) 假(False)

假(False) 假(False) 假(False)

2) $x || $y(Or)

$x    $y    结果

真(True) 真(True) 真(True)

真(True) 假(False) 真(True)

假(False) 真(True) 真(True)

假(False) 假(False) 假(False)

3) $x(Not)

$x    结果

真(True) 假(False)

假(False) 真(True)


其它常用的运算符

指令:..区块运算符(Range Operator)

说明:这个运算符是 Perl 语言中特有的运算符,是一个很实用的运算符。

范例:

@digits=(1..9); # 此时 @digits=(1,2,3,4,5,6,7,8,9);
@digits=('01'..'05'); # 此时 @digits=(01,02,03,04,05);
@char=('A'..'E'); # 此时 @char('A','B','C','D','E',);
@total=(1..3,'A'..'B'); # 此时 @total=(1,2,3'A','B');

指令: 条件运算符(Conditional Operator)

说明: (判别运算式? 运算式1: 运算式2)这个语法的意义和C语言一样:如果判别运算式的值是真(True)的话,则做运算式 1 的运算;如果判别运算式是假(False)的话,则做运算式 2 的运算。

范例:

$price = ($age>60)? 100:200;
如果 $age 大于60的话,则$price等于100,否则$price等于200。


常用的文件数据(File test)运算符


范例 说明
-r $file 如果 $file 是可读取的话,返回 1
-w $file 如果 $file 是可写入的话,返回 1
-x $file 如果 $file 是可执行的话,返回 1
-e $file 如果 $file 存在的话,返回 1
-s $file 返回 $file 的文件大小(bytes)
-f $file 如果 $file 是正常文件的话,返回 1
-T $file 如果 $file 是文本文件的话,返回 1
-B $file 如果 $file 是Binary文件的话,返回 1
-M $file 返回 $file 文件最后一次更改时间到现在的日期数


发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看51744次)
·UML类图详解 (查看46336次)
·Java编程开发手册 (查看24866次)
·UML统一建模语言 (查看23863次)
·C#技术开发指南 (查看21930次)
·Java编程开发手册 (1195个砖)
·Java基础教程 (429个砖)
·C#技术开发指南 (304个砖)
·PB开发教程 (220个砖)
·.NET开发手册 (217个砖)
·Java编程开发手册 (653个好)
·Java基础教程 (569个好)
·.NET开发手册 (248个好)
·PB开发教程 (208个好)
·Delphi开发技术手册 (174个好)
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 意见反馈 | 网站地图
Copyright©2005-2007 51CTO.COM 版权所有