|
1 简单变量Perl 的 Hello World 是怎么写的呢?请看下面的程序: #!/usr/bin/perlVPPLinux联盟 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; VPPLinux联盟 $a = "hello"; VPPLinux联盟 $a = 010;(表示十进制的 8)VPPLinux联盟 $a = 0x10;VPPLinux联盟 $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)VPPLinux联盟 @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。关联数组是存在在另外一个存储空间中,不和简单变量以及数组相混淆。 对关联数组的操作有如下规则: - 在关联数组中增加、更改一对数据:ARRAY={key}=value; 在关联数组ARRAY中加上一对 key-value,要在关联数组名称前加上 $ 号,而且 key 的名称要在 {} 符号之间,最后再指定 key 所对应的 value 值。如果在这个关联数组中已经有这个 key 了.就会更改这个 key 所对应的 value 。 VPPLinux联盟
- keys(%array) 操作符可生成由关联数组 %array 中的所有当前关键字组成的列表。即返回奇数号元素(第1,3,5,7...个)的列表。VPPLinux联盟
- values(%array) 操作符返回由关联数组 %array 中所有当前值组成的列表,即返回偶数个列表。VPPLinux联盟
- echo(%array) 操作符返回由 关键字/值对 构成的元素对列表。对同一数组再进行此操作时返回下一对值直至结束。若没有更多的对时,echo() 返回空表。 (这在打印全部列表中很有用) VPPLinux联盟
- 删除一对在关联数组中的数据:delete $ARRAY{key}; delete 是 Perl 所提供的函数,作用是删除关联数组中的一个 key 以及这个 key 所对应的 value。使用方法是在 delete 函数之后,指定关联数组中要删除的 key 名称。
下面是一些关联数组操作的例子: | %fred=(one,"aka",two,"free"); $a=$fred{one}; | # $a等于"aka"VPPLinux联盟
| | $b=$fred{two}; | # $b等于"free"VPPLinux联盟
| | $fred{two}="yes"; | # %fred=(one,"aka",two,"yes")VPPLinux联盟
| | @index=keys(%fred); | # @index=(one,two)VPPLinux联盟
| | @content=values(%fred); | # @content=("aka","yes")VPPLinux联盟
| | ($index,$content)=echo(%fred); | # 此时 $index 的值为 one,$content 的值为 "aka",再执行一次 $index 为值为 two,$name 的值为 "yes" | | @a=%fred; | # 将关联数组 fred 指定给数组 a,这时 @a=(one,"aka",two,"yes")VPPLinux联盟
| | %b=@a; | # 将数组 a 指定给关联数组 b,这时 %b=(one,"aka",two,"yes")VPPLinux联盟
| | delete $fred{one}; | # 将关联数组中 key 值为 one 的一对 key-value 删除,这时 %fred=(two,"yes") | | %x=(); | # 把 %x 关联数组置空VPPLinux联盟
|
4 各种运算符号汇总赋值(Assignment)运算符VPPLinux联盟 算术(Arithmetic)运算符VPPLinux联盟 数值(Numeric Values)关系运算符VPPLinux联盟 字符串(String Values)关系运算符VPPLinux联盟 逻辑(Logical)运算VPPLinux联盟 其它常用的运算符VPPLinux联盟 常用的文件数据(File Test)运算符 赋值(Assignment)运算符VPPLinux联盟
VPPLinux联盟
| | 符号 | 范例 | 说明 | | = | $x=$y; | 将$x的值指派给$y | | += | $x+=$y;VPPLinux联盟 $x=$x+$y; | 将$x加$y之后再指派给$x | | -= | $x-=$y;VPPLinux联盟 $x=$x-$y; | 将$x减$y之后再指派给$x | | *= | $x*=$y;VPPLinux联盟 $x=$x*$y; | 将$x乘$y之后再指派给$x | | /= | $x/=$y;VPPLinux联盟 $x=$x/$y; | 求出$x除以$y之后的商数,再指派给$x | | **= | $x**=$y;VPPLinux联盟 $x=$x**$y; | 将$x乘上$y次方之后再指派给$x | | %= | $x%=$y;VPPLinux联盟 $x=$x%$y; | 求出$x除以$y的余数以后,再指派给$x | | .= | $str1.=$str2;VPPLinux联盟 $str1=$str1.$str2; | 将$str1这个字符串再加上$str2这个字符串之后,再指派给$str1这个字符串 | | x= | $strx=$y;VPPLinux联盟 $str=$strx$y; | 重复$str字符串$y次,并反结果指派给str这个字符串 | VPPLinux联盟 算术(Arithmetic)运算符 VPPLinux联盟
| | 符号 | 范例 | 说明 | | + | $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 | VPPLinux联盟 数值(Numeric Values)关系运算符VPPLinux联盟
VPPLinux联盟
| | 符号 | 范例 | 说明 | | > | $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的值 | VPPLinux联盟 字符串(String Values)关系运算符VPPLinux联盟
VPPLinux联盟
| | 符号 | 范例 | 说明 | | 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)运算 VPPLinux联盟
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) | VPPLinux联盟 其它常用的运算符
指令:..区块运算符(Range Operator) 说明:这个运算符是 Perl 语言中特有的运算符,是一个很实用的运算符。 范例: @digits=(1..9); # 此时 @digits=(1,2,3,4,5,6,7,8,9);VPPLinux联盟 @digits=('01'..'05'); # 此时 @digits=(01,02,03,04,05);VPPLinux联盟 @char=('A'..'E'); # 此时 @char('A','B','C','D','E',);VPPLinux联盟 @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;VPPLinux联盟 如果 $age 大于60的话,则$price等于100,否则$price等于200。 | VPPLinux联盟 常用的文件数据(File test)运算符VPPLinux联盟
VPPLinux联盟
| | 范例 | 说明 | | -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 文件最后一次更改时间到现在的日期数 |
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论 |
|