语法元素
| 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;
| 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表、队列、正则表达式、格式定义等等。