学 Perl 时是不是总记不住函数用法?想用某个功能却不知道该调哪个函数?好多新手朋友跟我说,看语法文档时每个函数都懂,一到实际写脚本就脑子空白。其实啊,Perl 的基础语法没那么复杂,常用函数就那么几十个,把它们吃透了,日常脚本基本都能搞定。今天兔子哥就把新手必学的基础函数拆解开,每个函数配个实用案例,全是大白话讲解,还有避坑指南,新手跟着练,不出一周就能熟练用这些函数写脚本了。
一、标量函数:处理单个值的 “小工具”,这 3 个函数天天用
标量是 Perl 里最基础的数据类型,处理字符串、数字全靠这些函数,新手先把这几个吃透。
1. length:算字符串长度,判断输入是否为空超好用
想知道一个字符串有多少个字符?用 length 函数一秒搞定。比如检查用户输入是否为空:
perl
my $name = "Perl入门";my $len = length($name); # 计算长度print "字符串长度:$len\n"; # 会输出6(“Perl入门”是4个字母+2个汉字)# 实际用法:判断输入是否为空my $input = ; # 读取用户输入chomp $input; # 先去掉换行符,后面讲这个函数if (length($input) == 0) {print "输入不能为空哦!\n";}有朋友问:“汉字和字母都算一个长度吗?” 对的,Perl 里不管中英文,每个字符都算 1,这点比有些语言方便多了。
2. chomp:去掉换行符的 “神器”,新手必学防坑函数
读取用户输入或文件内容时,结尾总会带个换行符
\n,不处理掉会出各种小问题。chomp 函数就是专门干这个的:perl
print "请输入你的名字:";my $name = ; # 假设输入“小明”并回车,实际内容是“小明\n”print "你好,$name!"; # 不处理的话,感叹号会跑到下一行chomp $name; # 去掉换行符print "你好,$name!"; # 现在正常显示“你好,小明!”这函数新手一定要养成用的习惯!之前有学员写脚本时忘了 chomp,结果判断字符串相等时总出错,查了半天才发现是换行符在捣乱。
3. uc/lc:大小写转换,处理文本格式超方便
处理用户输入或日志时,经常需要统一大小写,uc 转大写、lc 转小写,简单又实用:
perl
my $str = "Hello Perl";my $upper = uc($str); # 转大写,结果是“HELLO PERL”my $lower = lc($str); # 转小写,结果是“hello perl”print "大写:$upper,小写:$lower\n";# 实际用法:统一用户名格式my $username = "xiaoming";my $standard = ucfirst(lc($username)); # 首字母大写,其他小写,结果“Xiaoming”ucfirst 是首字母大写,配合 lc 用,格式化名字、用户名特别方便,这招工作中经常用。
二、数组函数:操作列表数据的 “好手”,这 4 个函数最常用
数组就是一串数据的集合,增删改查全靠这些函数,处理批量数据离不了。
1. push/pop:给数组 “加元素” 和 “删最后一个元素”
想在数组末尾加数据用 push,删末尾数据用 pop,就像堆积木一样:
perl
my @fruits = ("苹果", "香蕉");push @fruits, "橙子"; # 数组变成("苹果", "香蕉", "橙子")my $last = pop @fruits; # 删掉“橙子”,$last是“橙子”print "现在数组有:@fruits\n"; # 输出“苹果 香蕉”新手常犯的错是漏写数组符号 @,比如写成 push fruits, "橙子",这样会报错,记住数组一定要带 @。
2. shift/unshift:操作数组 “第一个元素” 的函数
shift 删第一个元素,unshift 在开头加元素,和 push/pop 对应:
perl
my @nums = (1, 2, 3);unshift @nums, 0; # 数组变成(0, 1, 2, 3)my $first = shift @nums; # 删掉0,$first是0print "现在数组有:@nums\n"; # 输出“1 2 3”这两个函数在处理队列数据时特别有用,比如任务队列先进先出,就用 shift 取第一个任务。
3. join:把数组 “拼” 成字符串,生成 SQL 语句、日志常用
数组里的元素想连成一个字符串?用 join 指定分隔符就行:
perl
my @ids = (101, 102, 103);my $id_str = join(",", @ids); # 用逗号分隔,结果是“101,102,103”print "ID列表:$id_str\n";# 实际用法:生成SQL查询条件my $sql = "SELECT * FROM user WHERE id IN ($id_str)";print "SQL语句:$sql\n"; # 输出带ID的查询语句之前有学员手动拼接字符串,结果数组长一点就漏元素,用 join 既快又不容易错。
三、哈希函数:处理键值对的 “利器”,查数据比数组快 10 倍
哈希用键值对存数据,就像字典一样,查数据特别快,这两个函数必须会。
1. keys/values:获取哈希的 “所有键” 或 “所有值”
想知道哈希里有哪些键或值?用 keys 和 values 函数:
perl
my %user = ("name" => "小明", "age" => 20, "city" => "北京");my @all_keys = keys %user; # 获取所有键:("name", "age", "city")my @all_values = values %user; # 获取所有值:("小明", 20, "北京")print "用户信息的键:@all_keys\n";print "用户信息的值:@all_values\n";哈希的键值对顺序不固定,所以输出时顺序可能和定义不一样,这是正常的,不用纠结。
2. exists:检查哈希里 “有没有这个键”,避免报错
访问哈希里不存在的键会得到空值,用 exists 提前检查能少很多 bug:
perl
my %config = ("timeout" => 30, "max_size" => 1024);if (exists $config{"timeout"}) {print "超时设置:$config{timeout}秒\n";} else {print "没有设置超时时间,用默认值\n";}# 新手常踩的坑:直接访问不存在的键print $config{"retries"}; # 不会报错,但会输出空,容易误以为有值处理配置文件、用户数据时,exists 函数能帮你避免 “明明没设置却用了空值” 的问题。
四、文件操作函数:读写文件全靠它们,这 3 个函数必掌握
Perl 处理文件特别方便,这几个函数学会了,读写日志、处理文档都不愁。
1. open:打开文件的 “大门”,一定要加错误处理
打开文件用 open,记得加 or die 处理错误,不然文件打不开都不知道:
perl
# 读文件open my $in_fh, "<", "data.txt" or die "打不开文件:$!"; # <表示读# 写文件(覆盖原有内容)open my $out_fh, ">", "result.txt" or die "创建文件失败:$!"; # >表示写# 追加内容open my $app_fh, ">>", "log.txt" or die "追加失败:$!"; # >>表示追加$!是 Perl 的特殊变量,会显示具体错误原因,比如 “文件不存在”,新手一定要加上,不然排错超费劲。2. close:关闭文件的 “好习惯”,虽然 Perl 会自动关
文件用完要关闭,虽然程序结束 Perl 会自动关,但手动关更规范,尤其处理大文件时:
perl
open my $fh, "<", "test.txt" or die $!;# 这里读写文件...close $fh or die "关闭文件失败:$!";关闭失败很少见,但写上更保险,养成好习惯总没错。
3. print:往文件里写内容,和打印到屏幕用法类似
往文件写内容用 print,后面跟文件句柄就行,和打印到屏幕就多个句柄参数:
perl
open my $fh, ">", "note.txt" or die $!;print $fh "这是第一行内容\n"; # 写内容到文件print $fh "这是第二行内容\n";close $fh;写文件时记得加换行符
\n,不然所有内容会挤在一行,看着难受。五、正则表达式函数:Perl 的 “看家本领”,这两个函数最实用
Perl 处理文本的强项就在正则,这两个函数能解决 80% 的文本处理需求。
1. m//:匹配文本,提取想要的内容超方便
用 m// 判断字符串里有没有某个模式,加括号还能提取内容:
perl
my $str = "我的邮箱是test@example.com,电话13812345678";if ($str =~ m/(\w+@\w+\.\w+)/) { # 匹配邮箱格式print "提取到邮箱:$1\n"; # $1是第一个括号里的内容,输出test@example.com}=~是匹配运算符,左边是字符串,右边是正则表达式,新手别写成==了,这是常见错误。2. s///:替换文本,批量改内容效率超高
想替换字符串里的内容用 s///,比如把 “旧内容” 换成 “新内容”:
perl
my $text = "Perl很难学,Perl好复杂";$text =~ s/很难学/很简单/; # 替换第一个“很难学”$text =~ s/复杂/有趣/g; # 加g表示全局替换,所有“复杂”都换成“有趣”print $text; # 输出“Perl很简单,Perl好有趣”全局替换一定要加 g,不然只换第一个,新手经常忘,结果纳闷为啥没全换掉。
兔子哥觉得,学 Perl 函数不用死记硬背,用多了自然就记住了。新手可以把常用函数列个表,贴在屏幕旁,写脚本时忘了就看一眼,一周下来基本就熟了。
其实 Perl 的函数设计很人性化,名字都很直观,比如 length 就是长度,chomp 就是 “咬掉” 换行符,理解了意思就好记。遇到不会的函数,别慌,用
perldoc -f 函数名在终端查文档,比如perldoc -f chomp,能看到详细用法和例子,比翻书快多了。最后想说,写脚本时别追求用多高级的函数,把基础函数用好就够用了。新手阶段多写小案例,比如用数组函数处理购物清单,用哈希函数存学生成绩,用正则函数提取日志里的 IP,练得多了,自然就知道哪种场景该用哪个函数了。动手试试吧,你会发现 Perl 的函数其实很好用!
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~