perl 基本语法介绍

2019-10-01 14:23:59于海丽

# Expression 就是条件叙述式,Perl和C一样没有定义布尔数据型态(Boolean datatype),
# 因此 0 是false、非0 是ture。另外要注意字符串运算子和数值运算子要分清楚哦。
# Code Segment 就是用大括号括起来的一堆指令,也就是一个Block。
if (Expression) {Code Segment}
if (Expression) {Code Segment} else {Code Segment}
if (Expression) {Code Segment} elsif (Expression) {Code Segment} else {CodeSegment}
# elsif 就是 else if
# 如果指令(statement)只有一项,我们可以使用倒装句法,看起来比较简洁。
statement if (Expression);
# unless 就是if not
statement unless (Expression);例:
print "HELLO!n" if ($name eq "friend");
$x-=10 if ($x == 100);
看吧! C 语言有的Perl大部分都有,学过 C 的人可以毫不费力的学会Perl。

2循环结构
Perl的循环控制叙述也和C语言很像,当然,照例Perl也另外多了些实用的语法:
# 注意:纯量变数前面要加个 $ 字号,这一点和C语言不一样哦。
for($i=0; $i<=10; $i++) {Code Segment}

# foreach 是承袭UNIX的shell script来的,
# 第一个自变量是纯量变数,第二个自变量要用括号括起来,里面是一个纯量数组,
# 顾名思义它就是把数组中的每个元素依序传给第一个自变量,直到全部传完。
# 它和 for($i=0; $i<=$#array; $i++) 用法虽然不同,但目的都是要取出数组的每个元素。
foreach $i (@array) {Code Segment}
# 其实在Perl中,for和foreach是可以混着用的,就看个的人习惯了。
# 下面这行就等于上面第一个叙述,不过简洁多了,大家可以试着用用看。
for $i (0..10) {Code Segment}

# while控制循环和后置循环。
while($i<=10) {Code Segment}
do {Code Segment} while(Expression);
# Perl也有和C语言的break和continue一样的指令,Perl叫它做 last 和 next (较口语化)。
# last是跳出现在所在的循环,next则是跳过下面的指令直接执行下一次的循环。
while(chomp($i=)) {
next if ($i == 5);
last unless ($i > 10);
}

Perl 还有提供label(标记)的语法,也就是goto 指令,不过有经验的programer并不喜欢用它,我也不建议大家使用,所以就此按下不讲。有兴趣的人请自行查阅。还有一点值得注意的是Perl没有提供像C语言一样的 switch 叙述,不过Perl的pattern match的功能非常强,所以我建议你直接用 if else 叙述来做就好了。

3子程序(Subroutines)
(a) Syntax: sub NAME {Code}
(b) 呼叫子程序: &NAME(para1, para2,...)
(c) 参数传递:@_
Perl 和C一样是采用Call by value的方式,不过因为Perl不用事先宣告变量,所以建立子程序的时候也不用宣告要传递什么参数。当主程序在传递参数给子程序时,Perl会把括号括起来的参数按顺序放在一个特殊的全域变量 @_ 数组中,然后子程序就可以随意使用数组 @_ 里的参数,例如 $_[0] 是第一个参数, $_[1] 是第二个,或是用 my($a1,$a2,$a3,...) = @_;来取出各个参数,当然 my @arg=@_; 或 my %arg=@_; 也是可以的。由于Perl的语法非常活泼,使得程序在维护时特别棘手,因此写批注成为一项很重要的工作。我建议你最好在每个子程序前面加上对这段子程序的描述,特别是需要传递的参数要注明清楚。