加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl的语法

发布时间:2020-12-16 00:25:15 所属栏目:大数据 来源:网络整理
导读:1. 语句 1.1 结构 单个语句用;表示结束,结构如下: 语句;注释 例如: print “hello,word”;#输出hello,word 1.2 注释 #表示后面的内容为注释。 1.3 语句块 1)语句块用{和}包围。 2)一行可以有多个语句。 2. 执行及扩展名 2.1 程序扩展名 程序通常以pl结


1. 语句
1.1 结构

单个语句用;表示结束,结构如下:

语句;注释

例如:

print “hello,word”;#输出hello,word
1.2 注释

#表示后面的内容为注释。
1.3 语句块

1)语句块用{和}包围。

2)一行可以有多个语句。
2. 执行及扩展名


2.1 程序扩展名

程序通常以pl结尾,如果是做为Apache容器中的cgi程序执行脚本,必须为脚本文件名提供.pl或.cgi扩展名。
2.2 程序执行

在命令行中输入:perl 程序名


3. 变量与常量






3.1 变量的表示

变量的表示非常简洁:
1)不要求变量有类型。
2)对于数组,采用以@后接变量名表示,比如@names。
3)对于保存单个值的变量,采用$后接变量名表示,称之为标量,比如$name。
4)对于哈希变量,采用%后接变量名表示。
5)变量在第一次赋值前有一个特殊值 undef,即没有任何值。

3.2 变量的声明

1) 变量可以不声明,直接使用。

2) 声明语法是:

作用域 变量名
3.3 变量的作用域

1)变量前不加作用域限定,表示该变量为全局变量。

2)主要有my作用域和local作用域。

my作用域主要用来声明局部变量。my声明的变量仅作用于声明该的层次及同一层次上定义的其它子程序。

local作用域只影响声明的层次以及以内的层次,仅能在local作用域声明的层次及以内层次修改变量值。
3.4 预定义变量


预定义变量
用途

$_
在执行输入和模式搜索操作时使用的默认空格变量

$.
文件中最后处理的当前行号

$@
由最近一个eval()运算符提供的Perl语法报错信息

$!
获取当前错误信息值,常用于die命令

$0
获取当前执行脚本的程序名

$$
正在执行脚本的Perl进程号

$PERL_VERSION /z
Perl解释器的版本、子版本和修订版本信息

@ARGV
获取命令行参数列表

ARGV
一个特殊的文件句柄,用于遍历@ARGV中出现的所有文件名

@INC
库文件的搜索路径

@_
在子程序中,@_变量含有传给该子程序的变量内容

%ENV
关联数组型变量%ENV含有当前环境信息

%SIG
关联数组型变量%SIG含有指向信号内容的句柄


3.5 常量

4. 选择控制

在Perl中,选择控制包括if和unless,条件表达式值为空串或0时,为假, 否则为真。




4.1 如果为真if

表示如果为真。

语法一:

if(条件表达式)
{

表达式为真时的语句块;

}

或者为以下语法(注意不是语句块,是单个语句):

表达式为真时的语句块 if条件表达式;

范例1:

#perl0-1.pl

$x=1;

if ($x>0){

print “ok”;

}

print “ok” if $x>0;#和本程序中的上一个if功能完全一样

范例2:

#perl0-2.pl

$x=1;

if ($x) {#条件表达式非0,即真

print “x:yesn”;

}

$y=0;

if ($y) {#条件表达式为0,即假

print “y:yesn”;

}

$z=0.0;

if ($z) {#条件表达式为0,即假,注意0.0也作为数值表达式等于0

print “z:yesn”;

}

$a=’0’;

if ($a) {#条件表达式为0,即假

print “a:yesn”;

}

$b=’00’;

if ($b) {#条件表达式非0,即真

print “b:yesn”;

}

$c=’0.0’;

if ($c) {#条件表达式非0,即真,注意’0.0’做为字符表达式不等于0

print “c:yesn”;

}

$d=’’;

if ($d) {#条件表达式为空串,即假

print “d:yesn”;

}

$e=’ ‘;

if ($e) {#条件表达式为一个空格,不为空串,即真

print “e:yesn”;

}

运行结果如下:

x:yes

b:yes

c:yes

e:yes

语法二:

if(条件表达式){

条件表达式为真时的语句块;

}else{

条件表达式为假时的语句块;

}

范例:

#perl0-3.pl

$x=5;
if($x>0)
{

print”正数!n”;

}else{

print”0或负数!n”;

}

运行结果如下:

正数!

语法三:

if (条件表达式一)
{

条件表达式一为真时的语句块;

}elsif(条件表达式二){

条件表达式二为真时的语句块;

}elsif(条件表达式三){

条件表达式三为真时的语句块;

}







elsif(条件表达式n){

条件表达式n为真时的语句块;

}else{

所有条件表达式为假时的语句块;

}

范例:

#perl0-4.pl

$x=<STDIN>;

chomp($x);

if($x>=10000)

{

print”大于1万的正数!n”;

}elsif ($x>0){

print”小于1万的正数0!n”;

}

elsif ($x==0){

print”0!n”;

}

else{

print “负数!n”;

}

运行几次程序,依次输入测试数字100、300000、-200、0。

Perl perl0-4.pl

100

小于1万的正数0!

Perl perl0-4.pl

300000

大于1万的正数!

Perl perl0-4.pl

-200

负数!

Perl perl0-4.pl

0

0!








1.1 如果非真unless

表示如果非真,即:如果条件表达式不为真。

语法一:

unless(条件表达式) {

条件表达式为假执行的语句块;

}

也可以写成:

条件表达式为假执行的语句块unless (条件表达式);

范例:

#perl0-5.pl

#%为除余操作符

$x=6;

unless($x%2){

print “x是偶数n”;

}

print “x是偶数n” unless($x%2);

输出结果为:

x是偶数

x是偶数

语法二:

unless(条件表达式)
{

条件表达式为假时执行的语句块;

}else{

条件表达式为真时执行的语句块;

}

范例:

#perl0-6.pl

#%为除余操作符

$x=9;

unless($x%2){

print “x是偶数n”;

}

else{

print “x是奇数n”;

}

输出结果为:

x是奇数
1.2 更简洁的控制方式







4.3.1 替代if-else结构的三目操作符?:

?: 操作符可以替代if-else结构,语法格式如下:

条件表示式?表达式1:表达式2

表示如果条件表示式为真则求表达式1的值,否则求表达式2的值。

范例:

#perl0-7.pl

#%为除余操作符

$x=9;

$x%2?print "x是奇数n":print "x是偶数n";

输出结果为:

x是奇数
4.3.2 替代if结构的&&

&&可替代if结构,语法格式如下:

条件表达式 && 条件表达式为真时执行的语句块

范例:

#perl0-8.pl

#%为除余操作符

$x=8;

$x%2&& print "x是奇数n";

因为8不是奇数,所以print语句不会执行,无输出结果。

1.

2.

3.

1.

2.
4.3.3 替代unless结构的||

||可替代unless结构,语法格式如下:

条件表达式 || 条件表达式为假执行的语句块


#perl0-9.pl

#%为除余操作符

$x=8;

$x%2|| print "x是偶数n";

因为8是偶数,所以输出结果如下:

x是偶数
1. 循环控制

  Perl循环控制很丰富,其中某些控制语法在处理列表和数组方面相当实用和高效。

1

2

3

4

5

1

2

3

4

5
5.1 while

语法一:

while(条件表达式) {

语句块;

}

范例:

#perl0-10.pl

#计算1到10的连乘结果

$x=1;

$jg=1;

while($x<=10)
{

$jg=$jg*$x;

$x++;

}

print “$jgn”;

输出结果如下:

3628800

语法二:

语句块while(判别运算式);

范例:

#perl0-11.pl

#计算1到10的连乘结果

$x=1;

$jg=1;

{

$jg*=$x;

$x++;

} while($x<=10)

print “$jgn”;

请注意$jg*=$x这种写法,学过C语言的都知道:

$jg*=$x与$jg=$jg*$x的结果一样,但编译效率更高。

输出结果如下:

3628800
5.2 do while

与while相比,do while保证语句块至少执行一次。

语法:

do
{

语句块;

}while(条件表达式)

范例:

#perl0-12.pl

#求和1到100

$jg=0;

$x=1;

do{

$jg+=$x;
$x++;

}while($x<=100);
print "$jgn";

输出结果如下:

5050
5.3 until

until 直到...才终止循环

语法:

until(条件表达式)
{

语句块;

}

也可以写成: 语句块 until(条件表达式);

范例:

#perl0-13.pl

#从1开始求和,直到和大于1000终止

$jg=0;

$x=1;

until ($jg >1000)

{

$jg+=$x;

$x++;

}

print "1->$x:";

print "$jgn";

输出结果如下:

1->46:1035
5.4 do …until

do …until直到...才终止循环

语法:

do{

语句块;

}until (条件表达式);

范例:

#perl0-14.pl

#从1开始求和,直到和大于1000终止

$jg=0;

$x=1;

do

{

$jg+=$x;

$x++;

} until ($jg >1000);

print "1->$x:";

print "$jgn";输出结果如下:

1->46:1035
5.5 for

循环

语法一:

for (初始表达式;条件表达式;循环过程运算式)
{

语句块;

}

范例一:

#perl0-15.pl

#从1开始求和,直到和大于1000终止

$jg=0;

$x=1;

for ($jg=0,$x=1; $jg <=1000;$x++)

{

$jg+=$x;

}

print "1->$x:";

print "$jgn";

输出结果如下:

1->46:1035

语法二:

每次循环依次将数组变量的元素指定给标量

for 标量(数组变量)
{

语句块;

}

范例:

#perl0-16.pl

#从数组中挑出奇数

@myarr=(2,5,7,10,23,33,18);

print"奇数如下:n";

for $num(@myarr)

{

$num%2&&print "$num ";

}

print"n";

输出结果如下:

奇数如下:

5 7 23 33

语法三:

每次循环依次将数组变量的元素指定给预定义变量$_

for (数组变量)
{

读取$_,处理数组的相关语句块;

}

范例:

#perl0-17.pl

#从数组中挑出奇数

@myarr=(2,18);

print"奇数如下:n";

for (@myarr)

{

$_%2&&print "$_ ";

}

print"n";

输出结果如下:

奇数如下:

5 7 23 33
5.6 foreach

每次循环依次将数组变量的元素指定给标量

语法一:

foreach 标量(数组变量)
{

语句块;

}

如果把$variable变量省略的话,就会将数组@array的元素一一指定给$_这个内定的输出变量.

范例:

#perl0-18.pl

#从数组中挑出奇数

@myarr=(2,18);

print"奇数如下:n";

foreach $num(@myarr)

{

$num%2&&print "$num ";

}

print"n";

输出结果如下:

奇数如下:

5 7 23 33

语法二:

每次循环依次将数组变量的元素指定给预定义变量$_

foreach (数组变量)
{

语句块;

}

范例:

#perl0-19.pl

#从数组中挑出奇数

@myarr=(2,18);

print"奇数如下:n";

foreach (@myarr)

{

$_%2&&print; #使用无参数的print表示输出$_

print" ";

}

print"n";

输出结果如下:

奇数如下:

5 7 23 33
5.7 last退出循环

退出循环

语法:

last

范例:

#perl0-20.pl

#从1开始累加,直到和大于500为止

$x=1;

$jg=0;

while (1)

{

$jg+=$x;

$jg>500&&last;#求和>500退出循环

$x++;

}

print"sum(1:$x)=$jgn";

输出结果如下:

sum(1:32)=528
5.8 next终止本次循环

终止本次循环,进入下一循环。

语法:

next

范例:

#perl0-21.pl

#求出1-100内的奇数之和

foreach ($x=1,$jg=0;$x<=100;$x++){

$x%2||next;#如果是偶数则结束本次循环,不累加,继续下次循环

$jg+=$x;

$x++;

}
print "$jgn";

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读