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 是一个程序块的局部变量。
数组是标量数据的有序列表。数组可以含从 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 个元素的值互相交换。 |
关联数组是 perl 语言中特有的一种数据结构,是一个功能强大的数组,他与普通数组的不同在于关联数组不是通过整数下标来索引,而是通过“键值”进行索引。使用关联数组需要在变量前面加上 "%" 号,关联数组的格式如:
array=(key1,value1,key2,value2,key3,value3);
上面每个 key 都对应着一个 value。关联数组是存在在另外一个存储空间中,不和简单变量以及数组相混淆。
对关联数组的操作有如下规则:
下面是一些关联数组操作的例子:
| %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 关联数组置空 |
赋值(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); 指令: 条件运算符(conditional operator) 说明: (判别运算式? 运算式1: 运算式2)这个语法的意义和c语言一样:如果判别运算式的值是真(true)的话,则做运算式 1 的运算;如果判别运算式是假(false)的话,则做运算式 2 的运算。 范例: $price = ($age>60)? 100: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 文件最后一次更改时间到现在的日期数 | |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器