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 编程 基础用法的更多相关文章
- Shell 编程 基础用法
Shell 编程 更改shell脚本权限 chmod u+x shell.sh 标准头部写法 #! /bin/bash #! /bin/dash 变量使用 a=10 print $a 读取命令行参数 ...
- 【转】Shell编程基础篇-上
[转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...
- Linux基础篇–shell脚本编程基础
本章内容概要 编程基础 脚本基本格式 变量 运算 条件测试 配置用户环境 7.1 编程基础程序:指令+数据程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心 ...
- Linux CGI编程基础【整理】
Linux CGI编程基础 1.为什么使用CGI? 如前面所见,任何的HTML均是静态网页,它无法实现一些复杂的功能,而CGI可以为我们实现.如:a.列出服务器上某个目录中的文件,对目录中的文件进行操 ...
- SHELL脚本编程基础知识
SHELL脚本编程基础知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux之父Linus有一句话很经典:"Talk is cheap, show me the ...
- [.net 面向对象编程基础] (7) 基础中的基础——流程控制语句
[.net 面向对象编程基础] (7) 基础中的基础——流程控制语句 本来没有这一节的内容,后来考虑到既然是一个系列文章,那么就尽可能写的详细一些,本节参考了网上朋友所写的例子,为的是让更多小伙伴学习 ...
- [.net 面向对象编程基础] (8) 基础中的基础——修饰符
[.net 面向对象编程基础] (8) 基础中的基础——修饰符 在进入C#面向对象核心之前,我们需要先对修饰符有所了解,其实我们在前面说到变量和常量的时候,已经使用了修饰符,并且说明了变量和常量的修改 ...
- C#_GDI+详细教程(图形图像编程基础)
第7章 C#图形图像编程基础 本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础.C#图像处理基础以及简单的图像处理技术. 7.1 GDI+绘图基础 编写图形程序时需要使用GDI( ...
- perl编程中的map函数示例
转自:http://www.jbxue.com/article/14854.html 发布:脚本学堂/Perl 编辑:JB01 2013-12-20 10:20:01 [大 中 小] 本文介绍 ...
随机推荐
- Linux命令集锦之·正则表达式
时间:2018-11-15 记录:byzqy 正则表达式与通配符: 正则表达式,用来在文件中匹配符合条件的字符串,正则是包含匹配. grep.awk.sed 等命令可以支持正则表达式. 通配符,用来匹 ...
- iptables开启后造成本地套接字阻塞的问题
前段时间,我使用iptables实现了针对IP地址与MAC地址的白名单功能,即将INPUT链的默认规则设为DROP: iptables -P INPUT DROP 这样就能拒绝一切外来报文.随后只需要 ...
- javascript 之迭代器
简介 迭代器是一种设计模式,可在容器对象 如 链表.数组上遍历,无需关心容器对象的内存分配的实现细节.简单的理解就是可以一个一个的依次拿到其中的数据,类似一个移动的指针,但是会告诉我们什么时候结束.这 ...
- 图解最长回文子串「Manacher 算法」,基础思路感性上的解析
问题描述: 给你一个字符串 s,找到 s 中最长的回文子串. 链接:https://leetcode-cn.com/problems/longest-palindromic-substring 「Ma ...
- bat 使用ftp进行文件上传
实例 @echo off rem 打开远程ftp echo open 172.16.137.23 > ftpconfig.txt rem 使用匿名用户登录 echo user anonymuou ...
- Djangoform组件——ModelForm的基本使用
from django.contrib import admin from django.urls import path from app01 import views urlpatterns = ...
- Gram-Schmidt图像融合
遥感图像融合的定义是通过将多光谱低分辨率的图像和高分辨率的全色波段进行融合从而得到信息量更丰富的遥感图像.常用的遥感图像融合方法有Brovey\PCA\Gram-Schmidt方法.其中Gram-Sc ...
- 20210712 noip12
考场 第一次和 hzoi 联考,成功给 sdfz 丢人 尝试戴耳罩,发现太紧了... 决定改变策略,先用1h看题,想完3题再写. T1 一下想到枚举最大值,单调栈求出每个点能作为最大值的区间,然后以这 ...
- 20210805 noip31
考场 没有一眼题 T1 想到先贪心地算出最大得分,任意构造出一种方案,不断调整以增大字典序. T2 发现在 \(x_k\) 确定的情况下操作次数就是左右两边的逆序对数,\(x_i\) 互不相同时直接找 ...
- [考试总结]noip模拟46
脑袋确实是不好使了需要回家暴颓治疗 数数数树鼠树 真好玩. 数数 大水题一个,妥妥的签到题目,然后... 我没签上 气展了!!! 其实我还是想麻烦了. 就是我们实际上就是排序之后每一次找头上和尾巴上的 ...