Perl 介绍
Perl是一个强大的脚本语言,主要用于文本处理。由于其强大的文字处理能力,Perl成为了IC行业中常用的脚本语言。
Perl变量
- Perl变量只有三种:变量,数组,哈希表,使用时分别对应三个符号$,@,%
$var = "str01"; #字符型变量
$var = 123 #数值型变量
# 在比较字符型变量时,使用eq(相等),gt(字符的ascii码左边大于右边),lt(字符的ascii码左边小于等于右边)
# 在比较数值型变量时,使用==,>=,<=
@array = (a, b, c); # 数组初始化用圆括号
print array[0]; # 用下标访问数组
%hash{'google'}='google.com'; # 声明一个key->value,google->google.com,用花括号括住key用作下标,单引号括住value
print %hash{'google'}; # 这行命令打印出google.com
Perl控制流
- Perl的控制流与C语言相近,包括if,while,for,foreach(在遍历数组时用到)
$s01 = "abc";
@a01 = (1,3,7);
if(!($s01 eq "abc") && (@a01== 3)){ #如果变量等于"abc", 数组长度等于3,用@数组名就可以访问到数组的元素个数
say "yes!\n" #say的效果是在print基础上,自动加上换行
}
for($i=0; $i<5; $i++){
print("$i == %d\n",$i);
}
$k = 0;
while($k < 5){
print("for %d times while\n", $k);
}
@array=(3, 6, 9);
foreach $elem(@array){
say "foreach cycle $elem"
}
- 上面的if, for, while没有新的东西
- foreach的不同是在foreach后面要写上 $elem, 用于表示每次遍历访问的对象。如果没有$elem, 那么系统默认使用$_来表示当前访问的对象
- 另外,要使用say, 必须在文件前面加上use 5.010; 这个就硬记住。(用数据说话,5.010-say)
Perl 函数
- Perl函数使用关键字 sub,同时不需要给定参数列表,用@_表示函数的参数。(看来这个Perl,很喜欢搞些默认变量)
say ave(10, 30, 80);
sub ave{
$cnt = @_; #获取数组的元素个数
$sum = 0;
foreach(@_){
$sum += $_;
}
return $sum/$cnt; #求平均数
}
- 上述获取数组的元素个数这里,就是上面提及的直接用数组名称赋值给变量。
- 上面的例子说明了,在Perl中,调用函数可以在函数定义之前。
- 函数中使用的变量默认是全局变量,如果要使用局部变量,就要加个关键字my
- 为了增加代码的可阅读性,在调用函数时,要在函数名之前增加&
应用上面的要求,上述的代码就整理为
say &ave(10, 30, 80);
sub ave{
my $cnt= @_;
my $num = 0;
foreach(@_){
$num += $_;
}
return $num/$cnt;
}
强大的钻石操作符 '<>'
# in run.pl
while(<>){
print $_;
}
# in abc.txt
one
two
three
上面的代码给出了两个文件的内容,run.pl和abc.txt. 当在terminal输入perl run.pl abc.txt, 此时钻石操作符'<>'就表示,逐行读取abc.txt,然后打印出来,直至abc.txt的最后一行。如果将while换成foreach也是同样的道理。
总结
上面整理了Perl脚本的基本内容,包括变量,控制流,函数和文件的读取(钻石操作符),这样就足够理解别人写的Perl脚本了。
需要特殊注意的有以下5点:
- foreach的用法
- say的用法,
- 调用函数时的&
- 函数定义时的my
- 还有一些默认的系统变量,$(while, foreach中的循环对象),@(函数的输入参数列表),<>
- 求数组长度时,$len = @array;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· Apache Tomcat RCE漏洞复现(CVE-2025-24813)