Perl的简单语法(与C语言语法…
1 基本输入输出 $var=; # 读取一行输入,并存入变量 $var 中。 @var=; # 读取多行输入,并存入数组 @var 中。 在 Perl 语言中,变量 $_ 是许多操作符的缺省变量。因此如果需要读入许多行并对每行分别处理一般这样写: while($_=){ chop($_); # chop 调用用于去掉 $_ 变量中的最后一个字符(换行符)。 # 处理$_(每一行) } 或者可以简写为: while(){ chop; # 等同于chop($_) # 处理$_(每一行) } 如果 <> 括号之间没有任何字符,则表示从命令行所指示的文件中读取数据,看下面这个例子(read.pl): #!/usr/bin/perl; while(<>){ print $_; } 如果在命令行输入 $ perl read.pl read.pl 。这个程序将在屏幕上打印出文件 read.pl 的每一行。 在前面的例子中我们已经看见,Perl 语言中向标准输出输出数据可以用 print 语句。我们在 print 语句中可以输出多个变量,变量之间用 "," 分隔开来。如下面的例子: print 3,45*2,"hello",2+2; 上面的输出语句将给出 "390hello4" 的输出结果。 除了 print 语句以外,Perl 中还提供了一个 printf 语句用于标准输出,不过 printf 更接近于 C 语言的 printf 函数,可以进行格式化的输出,如: printf "s% 8d%8.2fn",$a,$b,$c; printf("s% 8d%8.2fn",$c); # 加上括号的 C 语言写法也是可以的。
@a = (1,2,3); printf @a; print "n"; print @a; print "n"; 输出的结果是: 1 123 如果在 @a 两边加上 "" ,则输出就都是 123了。 2? if 语法 1: if(判别运算式) { 表达式为真时的语句块; } 或写成:表达式为真时的语句 if (判别运算式); 实例为:print "您的分数及格了!n" if ($score>=60); if 语法 2: if(判别运算式一){ 判别式一为真时的语句块; }else{ 判别式一为假时的语句块; } if 语法 3: if (判别运算式一) { 判别式一为真时的语句块; }elsif(判别运算式二){ 判别式二为真时的语句块; }elsif(判别运算式三){ 判别式三为真时的语句块; }else{ 所有判别式为假时的语句块; } unless 语法 unless 语法 1: unless(判别运算式) { 判别式为假时语句块; } 或写为:判别式为假时语句 unless (判别运算式);
unless(判别运算式) { 判别式为假时语句块; }else{ 判别式为真时语句块; } 进阶技巧:"&&"、"||" 及 "? :" 比如说: if (判别表达式) {为真时语句块}; 也可以写为: 判别表达式 && 为真时的语句块 ? 同样道理,unless(this){that} 可替换为 this||that。 ? : 则可以这样使用: exp1?exp2:exp3 这个式子表示:如果 exp1 为真则求 exp2 的值,否则求 exp3 的值。 while 循环语法 while(判别运算式) { 程序叙述区块; } 上个语法在Perl中也可以写成: 程序叙述区块 while(判别运算式); do...while 循环语法 { 程序叙述区块; }while(判别运算式);
until 循环语法 { 程序叙述区块; } 上个语法在Perl中也可以写成: 程序叙述区块 until (判别运算式); do...until 循环语法 程序叙述区块; }until (判别运算式); for 循环语法 { 程序叙述区块; } 或者 for $variable(@array) { 程序叙述区块; }
foreach 循环语法 { 程序叙述区块; } 如果把$variable变量省略的话,就会将数组@array的元素一一指定给$_这个内定的输出变量. last 退出循环语法 for($i=1;$i<=10;$i++) { last if ($i==5); # 如果 $i 等于5的话就退出 for 循环 print"$in"; } next 继续循环语法 for($i<=10;$i++) { # 如果是 2 的倍数的话,就到循环的下一个陈述 next if($i%2)==0) print"$i是一个奇数!n"; } ?
用户函数又称子程序(Subroutine),在 Perl 中用下面的结构来定义用户函数: sub 子程序名{ 语句块; } ? 这里的子程序名与变量的取名规则类似。 与 BASH 程序不同,Perl 中的用户函数的定义可以位于程序的任何位置,比如说放在文件的未尾,而并不需要放在调用该函数的代码之前。如果两个子程序使用了相同的程序名,位置靠后的子程序将覆盖前面子程序。 需要注意的是用户函数中的变量默认为全局变量,并不是像 C 语言中那样是局部变量,Perl 函数中的变量可以被其他程序段共享。如果希望定义局部变量,可以用下面两种方法来实现: local($a); my $a; ? 另外用户函数的调用:通过在子程序前加“&”符号才可以,函数可在任一表达式内被调用。函数调用可以嵌套,即子程序中可以再调用另外的子程序,即可以程序员可以用 Perl 写出具有递归特性的代码。 调用用户函数产生的结果称为返回值(return value)。返回值是每次函数被执行时,最后一个被执行到的表达式的计算结果。如: sub add_a_b{ $a+$b; } ? 函数最后一条表达式为 $a+$b,故返回值为 $a+$b 的计算结果。以下是调用情况: $a = 5; $b = 6; $c = &add_a_b; # $c 的值为 11 $d = 5 * &add_a_b; # $d 的值为 5*11,即 55 ? 还有一个问题是,在 Perl 程序中如何向函数中传递参数呢?这是可以实现的,调用函数时,可以将参数依次放在函数名后面的 "()" 中,而在函数体中,系统默认数组 @_ 中就按同样顺序存放着所有的参数。我们可以访问 @_ 变量,从而确定参数的个数及其数值。 仍以加法函数为例: sub add_a_b{ $_[0]+$_[1]; } $c=&add_a_b(5,6); #$c的值为11 $d=5*&add_a_b(2,3); #d的值为5*5即25 ? 更为奇特的是,这种方式可以实现变参数传递,即参数个数不确定的传递。C 语言也可以实现这种传递,如我们熟悉的 printf 函数,只是他们的实现机制不太一样,C 更深奥一些,此处就不多解释了。 sub add_all{ $sum=0; #将sum初始化 foreach $_(@_) { #遍历参数列表 $sum+=$_; #累加每个元素 } $sum; #返回su 本文来自: 站长(http://www.qqcf.com) 详细出处参考:http://study.qqcf.com/web/277/42382.htm (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |