perl 常用基础语法总结

这篇博客详细介绍了Perl编程语言的基础知识,包括使用`use warnings`和`use strict`来提高代码质量,变量类型如标量、数组和哈希的使用,流程控制结构,以及常见的函数和文件操作。此外,还讲解了正则表达式的应用,如贪婪与非贪婪匹配,以及如何进行模式匹配和替换。博客内容深入浅出,适合Perl初学者入门学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 必加模块 warnings和strict,即脚本最开始都添加上

use warnings; use strict;  

use strcit可以直接找到很多简单的错误,但是要求所有的变量定义时都加上my

  1. 所有语句都以分号;结束
  2. 双引号转义输出,单引号原样输出
  3. 三种变量类型
  1. 标量 $  任何引用标量的地方都以$开始

标量可以是数字、字符串等,变量之间可以通过.连接起来

  1. 数组 @

元素引用方法: $arr[0] $arr[1],可以连续引用 $arr[3..5]

数组大小获取: 直接把数组变量赋值给一个标量 $size = @arr;

数组可以直接复制: @copy = @arr;

数组序列号: 采用(起始值..结束值)格式,注意包括首尾

常用方法:

  • 在数组尾部添加一个元素:push @arr ,var ; 或者直接对数组新下标赋值 $arr[5] = 10;
  • 取出数组第一个元素: var = shift@arr
  • 字符串转换为数组:@arr =  split(‘pattern’,$str);注意pattern可以为不同字符,.时需要加转义\
  • 数组转换为字符串:$str = join(‘expr’,@arr); 注意为.时不需要加转义\
  1. 哈希 %

元素引用方法: $hash{key},  %hash = (fgx’=> 10,’wcl’ => 25);

获取所有key:   @arr = keys%hash;  通过@arr大小获得hash的大小

获取所有value  @val = values%hash;

常用方法:

查看是否存在某个key: exists  exists($hash{key})

添加删除元素: 添加直接赋值,删除使用delete $hash{key};

foreach迭代哈希: foreach my $i (keys%hash) 这样可以通$i,$hash{$i} 获得键值

while迭代哈希: while(($key,$val) =each%hash) 即通过each%hash直接获得key和value

  1. 流程控制 都是基于{ } 来取代begin..end

1)条件:if ... elsif ... else   ? : 三目运算符

2)循环:for while foreach

   跳出循环:last 相当于C中break

   下次循环:next 相当于C中continue,注意perl中也有continue,和C中不一样

   foreach 使用,可以用变量控制,从数组(列表)中依次取出元素

   例如: foreach my $i (@arr)   

   例如: foreach (@arr)   #此时每个元素默认迭代变量为$_

  1. 运算符

支持+,-,*,/,%,**等各种C中运算符

数字比较: >=  <=  == !=  字符串比较:  eq ne

逻辑运算:and && or || not  

其他运算法: 字符串连接.  字符串重复x 例如 ‘a’ x 3 为aaa  范围..  匹配=~ 不匹配 !~

  1. 常用函数

获取当前时间: localtime()

my ($sec,$min,$hour) = localtime() 获得秒、分、时

退出子进程: exit()

调用unix命令:

  1. 使用``,命令结果可以保存在一个数组中
  2. 使用system(‘ls -l’); 这样会执行unix命令输出到默认的终端,也是使用 > 重定向到文件

注意:如果使用的标量为$USER,最好使用’’,否则会识别为perl的变量$USER

  1. 函数

函数以sub name {} 定义,直接通过名字调用,可以传递参数,传递的参数不需要在定义时声明,默认所有的参数放在@_ 这个特殊数组里面,$_[0] 是第一个参数$_[1]是第二个参数,以此类推

  1. 文件操作

(1)打开文件 open(in_file, “< abc.txt”) or die “cannont open this file abc.txt $!” 

注意点:

  • 文件句柄不用声明,变量前不加$,后续操作直接引用in_file
  • < 只读;> 只写;>> 追加; +> 读写;
  • die 函数触发告警信息并且退出
  • $! 是引起系统请求(如读写文件)失败的信息
  1. 文件操作 <文件句柄> 可以读出文件一行或整个

  @data = <in_file>; 则把整个文件内容按行读出来放到数据@data中

  while(<in_file>)  {

  print out_file $_;

  }

  while的方式文件逐行读出,每行内容为$_ 可以进行正则表达匹配或处理

  可以通过print 句柄 内容;的方式向文件写入内容

  1. 判断文件是否存在

 if( -e  “abc.txt”)   

 if( -d  ‘./tmp/’)  #判断目录是否存在

  1. 目录操作
  1. 显示某个目录下的所有文件

         @files = glob(“./tmp/*”); #glob 根据后面的目录加通配符搜索所有文件

  1. 打开某个目录,显示目录下所有文件

     opendir(DIR,’.’) or die “cannot open this dir $!”;

     while($file = readdir DIR) {

print $_.”\n”;

}

 close DIR;

  1. 创建目录 mkdir
  2. 删除目录 rmdir
  3. 切换目录 chdir
  1. 特殊变量

   $_ 可以作为迭代变量或文件输入的变量

   @ARGV 传给脚本的命令行参数列表,可以通过这个解析命令参数,如$ARGV[0] 第一个参数,@ARGV 同时可以表示为数组size; 例如 ./proc.pl ‘abc.txt’  则第一个参数为abc.txt

   %ENV  当前环境变量,放在哈希数组里面,可以根据key查看对应的环境变量值

  1. 正则表达式

* + ? {} 默认为贪婪模式即尽可能多的匹配,比如匹配0次或多次,则尽可能按多次来匹配,要改为非贪婪模式在后面加? 即 *? +??? {}?

匹配:m// 可以简写为//

替换:s///  

=~ 表示匹配,!~表示不匹配

常用选项:

  • /i:取消大小写敏感性
  • /s: .可以匹配任何字符,除了换行符为,如果要替换换行符,可以加选项/s
  • /g: 替换所有,全局匹配

常用表达式:

.* 表示匹配0次或多次任何字符

.+ 表示匹配1次货多次任何字符

[] 表示匹配[]内的字符

\d  表示匹配数字

\w  表示匹配数字或英文字母

\s  表示匹配空格

\b  表示匹配英文字符或数字为边界的字符串

a|b|c 表示匹配a或b或c 匹配到一个则不在匹配后面

(pattern)  表示匹配pattern,把第一个()内的匹配的变量放入到$1,第二个()内的匹配变量放入到$2 即从左边是第x个(,把对应pattern放入到对应个数的$x 变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值