Perl 编程 基础用法
2021/10/14 20:44:21
本文主要是介绍Perl 编程 基础用法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Perl 编程
标准头部写法
#!/usr/bin/perl -w # 标准的头部写法,-w意为显示警告
变量
$a=$b+10 # $a和$b都不需要定义,拿过来就用
Note: $flag=0
如果后续未用到,会爆警告
数组
1.基本知识
@array=() # 声明一个空数组 $array[1] # 取数组中的第2个值 $len=@array # 取数组的长度 $#array # 取数组最后一位值的下标 $array [0..4] # 取数组第1到第5个数 @array=(1..25) # 构建一个包含从1到25的数组 print @lines[0..$#lines] # 将一个数组从第1个到最后一个元素全部打印出来
2. 数组操作
push @array,$i # 将变量i插入到数组最后 pop @array # 删除最后一个值 shift @array # 弹出数组第一个值(常配合@ARGV)
3.判断两个数组是否相同
判断每一位是否相同
$index=0; while($index<@arr1) { if($arr1[$index] ne $arr2[$index]) { # to do } $index++; }
4.判断一个字符是否在某个数组中
$aim = 263; if(grep /^$aim$/,@arr1) # 使用grep判断字符$aim是否在@array中 { print "find\n"; }
5.对数组进行排序
- 以ASCII进行排序
@words1=("a","b","A","d","c"); @words2=("repaaaaaalace", "raplace", "input", "sequence", "of", "a", "repaalace", "character"); my @newwords1=sort @words1; #以ASCII进行排序,非字典顺序 my @newwords2=sort @words2; print "@newwords1\n"; print "-----\n"; print "@newwords2\n"; 输出: A a b c d ----- a character input of raplace repaaaaaalace repaalace sequence
- 对一个数字型数组排序
@num=(1,24,35,0); my @sorted = sort { $a <=> $b }@num; print "@sorted\n"; 输出: 0 1 24 35
6.合并数组内元素-join
join函数
@num=(1,24,35,0); my @str = join("-",@num); print "@str\n"; 输出: 1-24-35-0
if语句
if(条件1 || 条件2 && 条件3) { }elsif(条件) { # 注意此处为elsif }else { }
条件判断
eq,ne,gt,le # 进行字符串比较,前面不带- == 和 != # 数字匹配
for循环
# 第一种 for(my $i;$i<$len;$i=$i+1) { } # 第二种 foreach my $i (@array) { }
循环控制
last; # 退出循环 last与next last # 直接跳出循环体 类似break next # 跳出本次循环 exit exit 0; # 退出并返回0,也可以直接 exit; 不带返回值
常用函数
chomp
$line1=chomp($line)
可用于去除$line中最后的\n,也可以使用正则去掉
sqrt
$i=sqrt(100)
开平方
lc和uc
lc() # 将字符全部小写 uc() # 将字符全部大写
glob
glob 函数用于打印作为参数传递给它的目录中存在的文件。此功能可以打印所有或扩展名已传递给它的特定文件
foreach $file (glob "lyrics/*") { # 遍历lyrics目录下所有文件 }
rand
rand(5)
生成一个0-5之间的一个随机float型数,如3.1415926
int rand(5)
取整,结果为3(接上假设)
有关输入的重点内容
获取用户输入
./a.pl运行后 ,enter换行, 再次输入的内容使用<>读取
带有重定向符输入参数使用 <>
./digit.pl <1.txt
- 通过<>或
都可以直接将1.txt文件内容读进去
./digit.pl hello world <1.txt
- 使用<>依旧读取的是1.txt的内容,hello world并不会被读入
- 同时ARGV[2]并未定义,不是<1.txt
读进去的内容分割成单词加入一个数组
while ($line = <STDIN>) { my @words = split /[^a-zA-Z]+/, $line; foreach $word (@words) { $count++ if $word ne ''; } }
,文件做命令行参数
同一行的输入参数大多用@ARGV和open来读
同一行输入参数+换行输入参数--使用shift+while(<>)来读
如果单单使用while(<>)是读取不到7的
ARGV
@ARGV # 包含外界所有传入参数的一个数组 $len=@ARGV # 数组长度 $ARGV[0] # 外界传入的第一个参数 例:./echon.pl <t1.txt t2.txt t3.txt @ARGV=("t2.txt","t3.txt") 由于第一个参数含有重定向<,所以不会被放入ARGV中 $len=@ARGV 是 2 $ARGV[0] 是 t2.txt ------------ shift @ARGV # 将外界输入参数第一位弹出来 例: ./digit.pl -5 1.txt shift @ARGV # 操作之后可以直接对@ARGV进行操作,即操作1.txt
打开并读取文件
open F,'<',t1.txt or die "$0: Can't open $file: $!\n"; 将t1.txt打开至 F中,后续可以对<F>进行操作,如@array=<F> close F;
打开并写入文件
print("\n") 可以实现换行 print('\n') 会把\n打印出来 print $out $line 注意这种写法,意思为在$out里写入$line(不可以加括号)
字符串一些操作
获取字符串长度
length($line) 获取字符串的长度
对字符串进行切片
$str=substr($line,2,10) 从第3个字符开始获取$line中总计10个字符(类似切片)
字符串拼合
$a.="hello world" 字符串相加
切割字符串
split函数
my @words=split(/ /,$text); # 将text中的内容以空格间隔,重新加入数组words中 例子: $line="a b c d 1" 输出结果: @words={a,b,c,d,1}
函数
sub test{ # test后面不加() my ($test,$test1)=@_; # @_意为外界传进来的实参,可传多值 print($test); return $test+$test1; # 同样使用return来返回值 } test(1,2);
字典
哈希(字典)
%data={'today','818','tomorrow','819','yesterday','817'} # 通过逗号隔开 $data{'today'} # 读取某一键的值 读取今天,818 @names = keys %data; # 读取所有的key @values = values %data; # 读取所有的value $data{'thedaybeforeyesterday'}='816'; # 直接赋值即可添加键值对 delete $data{'today'} # 通过delete删除键值
正则匹配
匹配
=~ # 匹配 !~ # 不匹配 if($i=~/-([0-9]+)/) { print($1); # 重点知识:$1为正则匹配中第一个括号里内容,$2为第二括号内内容 } //i # 匹配忽略大小写 ---------------------- $1,$2是只读无法改变的,可使用$num=$1 去进行后续操作 将匹配结果赋值给另一个值 a=b=~//;
替换
s///g # 替换字符,g表示全局匹配 例:s/[01234]/</gi; # 将字符串里所有的01234替换成< $i =~ s/[1234]/</gi; # 将变量i中所有的1234替换成< $line =~ s/^\s*//; # 去掉开头空白格 $line =~ a/\s*$//; # 去掉末尾的空白格 补充: \w # 匹配一个字母、数字或下划线 \d # 匹配一个数字,同[0123456789] \s # 匹配一个空格 [^0-9] # 匹配纯数字 [^a-zA-Z] # 匹配非字母
shell与perl正则匹配的区别
-
shell是将整个文件读进来,通过某一个关键字匹配去获取一整行内容
-
perl是将一整个文件逐行读进来,通过匹配来得到一行中某些特定的字段,加上使用group($1)来配合提取某些字段
这篇关于Perl 编程 基础用法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26大厂数据结构与算法教程:入门级详解
- 2024-12-26大厂算法与数据结构教程:新手入门指南
- 2024-12-26Python编程入门指南
- 2024-12-26数据结构高级教程:新手入门及初级提升指南
- 2024-12-26并查集入门教程:从零开始学会并查集
- 2024-12-26大厂数据结构与算法入门指南
- 2024-12-26大厂算法与数据结构入门教程
- 2024-12-26二叉树入门教程:轻松掌握基础概念与操作
- 2024-12-26初学者指南:轻松掌握链表
- 2024-12-26平衡树入门教程:轻松理解与应用