微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Perl常用语法

本文主要为了方便阅读、编写perl脚本而记录的常用的命令、语法。

一、条件判断语法

注意,数字 0,字符串 ‘0‘ 、 "",空 list (),和 undef 为 false ,其他值均为 true。 true 前面使用 !not则返回 false

语句 描述

if 语句

一个 if 语句一个布尔表达式后跟一个或多个语句组成。

if...else 语句

一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。

if...elsif...else 语句

您可以在一个 if 语句后可跟一个可选的 elsif 语句,然后再跟另一个 else 语句

unless 语句

一个 unless 语句一个布尔表达式后跟一个或多个语句组成。

unless...else 语句。

一个 unless 语句 后可跟一个可选的 else 语句

unless...elsif..else statement

一个 unless 语句 后可跟一个可选的 elsif 语句,然后再跟另一个 else 语句

switch 语句

在最新版本的 Perl 中,我们可以使用 switch 语句。它根据不同的值执行对应的代码块。

1.IF语句

语法:

if(boolean_expression){
   # 在布尔表达式 boolean_expression 为 true 执行
}

示例:

#!/usr/bin/perl 

$a=20;


if($a>=20){
   printf "a 大于等于 20 \n";
}
printf "变量a的值为:$a\n"

结果:

分享图片

2.IF...ELSE 语句

 语法:

if(boolean_expression){
   # 在布尔表达式 boolean_expression 为 true 执行
}else{
   # 在布尔表达式 boolean_expression 为 false 执行
}

示例:

#!/usr/bin/perl 

$a=10;

if($a>=20){
   printf "a 大于等于 20 \n";
}else{
   printf "a 小于 20\n";
}
printf "变量a的值为:$a\n";

输出结果:

分享图片

3.IF...ELSIF...else 语句

语法:

if(boolean_expression 1){
   # 在布尔表达式 boolean_expression 1 为 true 执行
}
elsif( boolean_expression 2){
   # 在布尔表达式 boolean_expression 2 为 true 执行
}
elsif( boolean_expression 3){
   # 在布尔表达式 boolean_expression 3 为 true 执行
}
else{
   # 布尔表达式的条件都为 false 时执行
}

示例:

#!/usr/bin/perl 

$a=10;

if($a>10){
   printf "a 大于 10 \n";
}elsif($a=10){
   printf "a 等于 10\n";
}else{
   printf "a 小于 10\g";
}

printf "变量a的值为:$a\n";

结果:

分享图片

4.switch 语句

 语法:

use Switch;
 
switch(argument){
   case 1            { print "数字 1" }
   case "a"          { print "字符串 a" }
   case [1..10,42]   { print "数字在列表中" }
   case (\@array)    { print "数字在数组中" }
   case /\w+/        { print "正则匹配模式" }
   case qr/\w+/      { print "正则匹配模式" }
   case (\%hash)     { print "哈希" }
   case (\&sub)      { print "子进程" }
   else              { print "不匹配之前的条件" }
}

示例:

#!/usr/bin/perl
 
use Switch;
 
$var = 10;
@array = (10,20,30);
%hash = (key1 => 10,key2 => 20);
 
switch($var){
   case 10           { print "数字 10\n" }
   case "a"          { print "字符串 a" }
   case [1..10,42]   { print "数字在列表中" }
   case (\@array)    { print "数字在数组中" }
   case (\%hash)     { print "在哈希中" }
   else              { print "没有匹配的条件" }
}

结果:

分享图片

5.三元运算

 语法:

Exp1 ? Exp2 : Exp3;

示例:

#!/usr/bin/perl
 
$a=1>2?false:true;

print "$a\n"

结果:

分享图片

二、循环语句语法

循环类型 描述

while 循环

当给定条件为 true 时,重复执行语句或语句组。循环主体执行之前会先测试条件。

until 循环

重复执行语句或语句组,直到给定的条件为 true。 循环主体执行之前会先测试条件。

for 循环

多次执行一个语句序列,简化管理循环变量的代码

foreach 循环

foreach 循环用于迭代一个列表或集合变量的值。

do...while 循环

除了它是在循环主体结尾测试条件外,其他与 while 语句类似。

嵌套循环

您可以在 while、for 或 do..while 循环内使用一个或多个循环。

1.while循环

语法:

while(condition)
{
   statement(s);
}

示例:

#!/usr/bin/perl
 
$a = 10;
 
while( $a < 20 ){
   printf "a 的值为 : $a\n";
   $a = $a + 1;
}

结果:

分享图片

2.for循环

语法:

for ( init; condition; increment ){
   statement(s);
}

示例:

#!/usr/bin/perl
 
for( $a = 0; $a < 10; $a = $a + 1 ){
    print "a 的值为: $a\n";
}

结果:

分享图片

3.循环控制语句

控制语句 描述

next 语句

停止执行从next语句的下一语句开始到循环体结束标识符之间的语句,转去执行continue语句块,然后再返回到循环体的起始处开始执行下一次循环。

last 语句

退出循环语句块,从而结束循环

continue 语句

continue 语句块通常在条件语句再次判断前执行。

redo 语句

redo 语句直接转到循环体的第一行开始重复执行本次循环,redo语句之后的语句不再执行,continue语句块也不再执行;

goto 语句

Perl 有三种 goto 形式:got LABLE,goto EXPR,和 goto &NAME。

 三、perl运算符

1.算数运算符

运算符 描述 实例
+ 加法运算 $a + $b 结果为 30
- 减法运算 $a - $b 结果为 -10
* 乘法运算 $a * $b 结果为 200
/ 除法运算 $b / $a 结果为 2
% 求余运算,整除后的余数 $b % $a 结果为 0
** 乘幂 $a**$b 结果为 10 的 20 次方

2.比较运算符

运算符 描述 实例
== 检查两个操作数的值是否相等,如果相等则条件为 true,否则为 false。 ($a == $b) 为 false
!= 检查两个操作数的值是否相等,如果不相等则条件为 true,否则为 false。 ($a != $b) 为 true。
<=> 检查两个操作数的值是否相等,如果左边的数小于右边的数返回 -1,如果相等返回 0,如果左边的数大于右边的数返回 1 。 ($a <=> $b) 返回 -1。
> 检查左操作数的值是否大于右操作数的值,如果是则条件为 true,否则为 false。 ($a > $b) 返回 false。
< 检查左操作数的值是否小于右操作数的值,如果是则条件为 true,否则返回 false。 ($a < $b) 返回 true。
>= 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为 true,否则返回 false。 ($a >= $b) 返回 false。
<= 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为 true,否则返回 false。。 ($a <= $b) 返回 true。
运算符 描述 实例
lt 检查左边的字符串是否小于右边的字符串,如果是返回 true,否则返回 false。 ($a lt $b) 返回 true。
gt 检查左边的字符串是否大于右边的字符串,如果是返回 true,否则返回 false。 ($a gt $b) 返回 false。
le 检查左边的字符串是否小于或等于右边的字符串,如果是返回 true,否则返回 false。 ($a le $b) 返回 true
ge 检查左边的字符串是否大于或等于右边的字符串,如果是返回 true,否则返回 false。 ($a ge $b) 返回 false。
eq 检查左边的字符串是否等于右边的字符串,如果是返回 true,否则返回 false。 ($a eq $b) 返回 false。
ne 检查左边的字符串是否不等于右边的字符串,如果是返回 true,否则返回 false。 ($a ne $b) 返回 true
cmp 如果左边的字符串大于右边的字符串返回 1,如果相等返回 0,如果左边的字符串小于右边的字符串返回 -1。 ($a cmp $b) 返回 -1。

3.逻辑运算符

运算符 描述 实例
and 逻辑与运算符符。如果两个操作数都为 true,则条件为 true。 ($a and $b) 为 false。
&& C 风格的逻辑与运算符符。如果两个操作数都为 true,则条件为 true ($a && $b) 为 false。
or 逻辑或运算符。如果两个操作数中有任意一个非零,则条件为 true。 ($a or $b) 为 true。
|| C 风格逻辑或运算符。如果两个操作数中有任意一个非零,则条件为 true。 ($a || $b) 为 true。
not 逻辑非运算符。用来反转操作数的逻辑状态。如果条件为 true,则逻辑非运算符将使其为 false。 not($a and $b) 为 tru

4.赋值运算符

运算符 描述 实例
= 简单的赋值运算符,把右边操作数的值赋给左边操作数 $c = $a + $b 将把 $a + $b 的值赋给 $c
+= 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 $c += $a 相等于 $c = $c + $a
-= 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 $c -= $a 相等于 $c = $c - $a
*= 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 $c *= $a 相等于 $c = $c * $a
/= 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 $c /= $a 相等于 $c = $c / $a
%= 求模且赋值运算符,求两个操作数的模赋值给左边操作数 $c %= $a 相等于 $c = $c % a
**= 乘幂且赋值运算符,求两个操作数的乘幂赋值给左边操作数 $c **= $a 相等于 $c = $c ** $a

5.位运算符

运算符 描述 实例
& 如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。 ($a & $b) 将得到 12,二进制为 0000 1100
| 如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。 ($a | $b) 将得到 61 ,二进制为 0011 1101
^ 如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。 ($a ^ $b) 将得到 49,二进制为 0011 0001
~ 二进制补码运算符是一元运算符,具有"翻转"位效果,即0变成1,1变成0。 (~$a ) 将得到 -61 ,二进制为 1100 0011 ,一个有符号二进制数的补码形式。
<< 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 $a << 2 将得到 240 ,二进制为 1111 0000
>> 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 $a >> 2 将得到 15 ,二进制为 0000 1111

6.引号运算符

q{ } 为字符串添加单引号 q{abcd} 结果为 ‘abcd‘
qq{ } 为字符串添加双引号 qq{abcd} 结果为 "abcd"
qx{ } 为字符串添加反引号 qx{abcd} 结果为 `abcd`

7.其他运算符

运算符 描述 实例
. 点号 (.) 用于连接两个字符串。 如果 $a="run",$b="oob" , $a.$b 结果为 "runoob"
x x 运算符返回字符串重复的次数 (‘-‘ x 3) 输出为 ---。
.. .. 为范围运算符。 (2..5) 输出结果为 (2,3,4,5)
++ 自增运算符,整数值增加 1 $a =10,$a++ will 输出为 11
-- 自减运算符,整数值减少 1 $a =10,$a-- 输出为 9
-> 箭号用于指定一个类的方法 $obj->$a 表示对象 $obj 的 $a 方法

8.运算符优先级

运算符符 结合性
++, --
-, ~, ! 从右到左
** 从右到左
=~, !~ 从左到右
*, /, %, x 从左到右
+, -, . 从左到右
<<, >> 从左到右
-e, -r,
<, <=, >, >=, lt, le, gt, ge 从左到右
==, !=, <=>, eq, ne, cmp 从左到右
& 从左到右
|, ^ 从左到右
&& 从左到右
|| 从左到右
.. 从左到右
? and : 从右到左
=, +=, -=, *=, 从右到左
其他
, 从左到右
not 从左到右
and 从左到右
or, xor 从左到右

四、perl时间格式

time() 函数:返回从1970年1月1日起累计的秒数
localtime() 函数获取本地时区时间
gmtime() 函数获取格林威治时间

1.localtime对应时间变量

sec,# 秒, 0 到 61
min,# 分钟, 0 到 59
hour,# 小时, 0 到 24
mday,# 天, 1 到 31
mon,# 月, 0 到 11
year,# 年,从 1900 开始
wday,# 星期几,0-6,0表示周日
yday,# 一年中的第几天,0-364,365
isdst    # 如果夏令时有效,则为真

2.格式化时间输出

1)通过时间变量格式化输出

#!/usr/bin/perl
 
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
 
printf("格式化时间:YYYY-mm-DD HH:MM:SS\n");
printf("%04d-%02d-%02d %02d:%02d:%02d\n",$year+1900,$mon+1,$sec);

分享图片

2)通过POSIX 函数 strftime()格式化时间输出

#!/usr/bin/perl
use POSIX qw(strftime); 

$datestring = strftime "%Y-%m-%d %H:%M:%s",localtime;
printf("时间日期 - $datestring\n");

分享图片

3.POSIX 函数 strftime()格式

符号 描述 实例
%a 星期几的简称( Sun..Sat) * Thu
%A 星期几的全称( Sunday..Saturday) * Thursday
%b 月的简称(Jan..Dec) * Aug
%B 月的全称(January..December) * August
%c 日期和时间 * Thu Aug 23 14:55:02 2001
%C 年份除于100,并取整 (00-99) 20
%d 一个月的第几天 (01-31) 23
%D 日期,MM/DD/YY 相等于%m/%d/%y 08/23/01
%e 一个月的第几天,使用空格填充个位数 ( 1-31) 23
%F YYYY-MM-DD 的简写类似于 %Y-%m-%d 2001-08-23
%g 年份的最后两位数 (00-99) 01
%g 2001
%h 月的简称 * (和%b选项相同) Aug
%H 24 小时制 (00-23) 14
%I 12 小时制 (01-12) 02
%j 一年的第几天 (001-366) 235
%m 月 (01-12) 08
%M 分钟 (00-59) 55
%n 新行 (‘\n‘)  
%p 显示出AM或PM PM
%r 时间(hh:mm:ss AM或PM),12小时 * 02:55:02 pm
%r 24 小时 HH:MM 时间格式,相等于 %H:%M 14:55
%s 秒数 (00-61) 02
%t 水平制表符 (‘\t‘)  
%T 时间(24小时制)(hh:mm:ss),相等于%H:%M:%s 14:55
%u ISO 8601 的星期几格式,星期一为1 (1-7) 4
%U 一年中的第几周,星期天为第一天(00-53) 33
%V ISO 8601 第几周 (00-53) 34
%w 一个星期的第几天(0代表星期天) (0-6) 4
%W 一年的第几个星期,星期一为第一天 (00-53) 34
%x 显示日期的格式(mm/dd/yy) * 08/23/01
%X 显示时间格式 * 14:55:02
%y 年,两位数 (00-99) 01
%Y 2001
%z ISO 8601与UTC的时区偏移(1 minute=1,1 hour=100)

 

+100
%Z 当前时区的名称,如"中国标准时间" *

 

CDT
%% % 符号 %

五、函数

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐