说起编程语言,简单的来说无非就是这样几个必不可少的基本元素:变量、数据、表达式、流程控制语句(包括条件、分支、循环)、函数、对象。具体到语言上,大部分的内容只是表达的形式不同而已。而Perl与C又有什么区别呢?
首先要知道,Perl是一种脚本语言。所谓的脚本,就是没有主函数,从最开始一行一行的按照顺序解释执行(老版Basic不也是如此吗)。因此,尽管把你的思路转化为流程用Perl表达出来吧。
其次,Perl的设计中参考了很多语言的长处,并避免了设计上的缺陷。因此Perl的很多语法你可能都会觉得似曾相识。我把Perl的语法总结了一下,和C语言做了一个简单的对比表格。表格左右两边的语句是C和Perl对应表达同一个功能各自的不同方式。如果读者有C语言的经验,相信看到这个对比可以很快的上手吧?
|
语法元素 |
C | Perl |
Perl语法说明 |
|
注释 |
/* … */ |
# … |
只支持单行注释 |
|
变量 |
int a, b, c; char c=’A’; int x[10]; |
my ($a, $b, $c); my $c='A'; my @x; my %h; |
声明使用my标示 表示值的变量以$开头,表示数组的变量以@开头,表示哈希表的变量以%开头。 声明可以省略(不建议) |
|
字符串 |
char* h1=”hello\n”; char* h2=”hello\\n”; |
$h1=”hello\n”; $h2=’hello\n’; |
双引号解释内部的\n,而单引号则不解释 |
|
一维数组 |
int arr[10]; arr[0]=0; for(i=0;i<10;i++) arr[i]=i; |
my @arr; $arr[0]=0; @arr[3..5]=(3..5); |
数组声明以@标示 动态数组,不需要指定大小 数组下标从0开始 访问数组元素值的时候,要以$开头表示访问的是数值 [3..5]表示数组中下标为3到5之间的元素组成的数组 数组之间可以直接赋值 |
|
多维数组 |
int arr[10][10]; arr[0][1]=9; |
my @arr; $arr[0][1]=9; |
Perl并不直接支持多维数组,而是以数组引用的方式间接支持。例如arr[0]的内容就是一个数组的引用地址。 |
|
指针 |
char c; int* x=&c; c='a'; printf(*x); |
my $c; my $x=\$c; $c='a'; print $x; |
\和C中的&类似,意思是取引用 |
|
void hello() { printf(“Hello\n”); } void (*hi)()=hello; (*p)(); |
sub hello{ print "Hello\n"; } my $hi = *hello; &$hi; |
&表示调用函数 *取函数的代码地址 不必用括号把参数括起来 调用时的括号也是可选的 | |
|
条件语句 |
if (x>0) x=0; x>0 ? x=0 : ; |
if ($x>0) { $x=0; } $x=0 if $x>0; $x=0 unless $x<=0; $x>0 ? $x=0 : ; |
if 结构可以反转,意义不变,注意前句没有分号。 顾名思义, unless是“除非”的意思。这里的四个表达方式是等价的。注意第一种方式中,条件部分的圆括号和语句部分的花括号是不可省略的。 |
|
循环语句 |
略 |
foreach (@arry) foreach my $key(@ary) foreach $count (1..10) |
for/while的语法都和C类似。 foreach关键字也可以用for,意义不变。 |
|
函数 |
int max(int x, int y) { return x>y?x:y; }
int n=max(1,2); |
sub max { my ($x, $y)=@_; return $x>$y?$x:$y; } my $n=max(1,2) |
注意下划线”_”也是一个合法的变量名。而@_是Perl内置的一个数组,内容为函数的参数。 my ($x, $y) 表示声明了一个有两个元素的数组,并将两个元素映射到$x和$y上。 ($x,$y)=@_;则表示两个数组之间的复制,@_中对应的元素的值就赋值给了$x和$y.这是一个简便的写法,也可以这样写 my $x=$_[0]; my $y=$_[1]; return是可选的,默认返回最后一个表达式的值 |
|
语法约束 |
1. 编译时打开编译器所有的警告选项 2. 使用lint工具 |
3. perl –w myprogram.pl 打开运行警告开关,如果运行时Perl检查到了可能的错误,会显示警告信息,否则它默认是什么也不提示继续执行。 4. #!/usr/bin/perl –w 在代码文件第一行中加入-w选项开关 5. use strict; 使用严格语法约束 | |
|
运行 |
编译后直接执行 |
1. perl myprogram.pl 手工执行 2. #!/usr/bin/perl Unix下在代码第一行加入,然后给文件加上可执行的属性 chmod +x myprogram.pl,之后就可以用./myprogram.pl命令来运行。 3. Windows下,安装ActivePerl的时候,已经将.pl后缀的文件和perl的解释程序关联起来了,因此直接双击文件图标就可以运行。 |
需要说明的是,在Perl的世界中有一句名言“条条大路通罗马”, 这句话的意思是说同样一件事情Perl允许你用很多种不同的方式去做。因此上表的例子风格是按照C的习惯来写的,并且为了简化起见,只是挑选了与C相似的内容。事实上,Perl包含了很多C没有的东西,例如内置的Hash表、队列、正则表达式、格式定义等等。
