Perl Summary
Perl Summary
工作中经常用到perl,下面是perl的一些常见用法!
GetOptions
通过
use Getopt::Long;
引用Getopt这个函数;
其用法为:
GetOptions(
"tag=s" => \$tag,
....
);
下面是一个简单的例子:
GetOptions(
"help|h:i" => \$opt_help,
"src|s=s" => \$opt_src,
"des|d=s" => \$opt_des,
"type|t=s" => \$opt_type
);
下面对其一个一个进行解释:
首先是上引号内部的内容:“help|h”,这里的意思是perl的option为-help或者-h,例如:
perl -help
perl -h
然后是:i
,冒号的意思为这个option后不一定要有参数值;i的意思为传递的option为整数参数;结合起来的意思就是:-help或中-h后需要跟整数参数,也可以不给参数,例如
perl -help
perl -help 5
如果是=s
,=意味着这个option后一定要有参数值,s意味着这个参数为字符串参数,例如
perl -src home
然后是=>
,这其实就相当于赋值的操作;
接着是\$opt_help
,这里相当于将-help
后跟的参数赋值给$opt_help
,例如
perl -help 1
那么$opt_help就赋值为1;
或者
perl -help
这里需要注意的是,虽然-help
后没有跟参数,但是由于出现了-help这个选项,所以$opt_help
也会被赋值为1;
perl -src home
则$opt_src
就被赋值为home;
注意:
这里的option是可以不出现的;
各种常见的符号
$0
表示当前执行的文件;
$n
(n大于0)这个变量保存的值为上一次匹配操作(/pattern/)
中第n个小括号()所匹配到的内容,$1
则代表第一个小括号匹配到的内容;
$#
代表的是数组的最后一个元素的索引,索引从0开始,也就是获取数组的长度;
$_
是默认控制变量,可以省略,foreach
和while
的默认控制变量都是$_
;如果我们没有告知perl使用哪个变量或者参数时,perl会自动使用$_
;
.
可以用于将字符串连接起来;
x
可以用于重复字符串;
正则匹配
正则匹配在perl里非常常见,其具体格式为
$arc =~ /pattern/
常与if判断来配合使用;
例如:
if ($opt_src =~ /\/\s*$/)
...
对于正则匹配,使用符号=~,匹配内容放在//内;
这里的具体意思为:
\/
用于匹配/
\s*
用于匹配多个或零个空白字符
$
用于表示以前面匹配的内容结尾,也就是以多个或零个空白字符结尾;
例如
perl -src /home/user/perl/
首先通过-src
选项将其参数赋值给$opt_src
,然后去匹配其是否为/结尾;
正则替换
正则替换在perl也很常见,其格式为
$arc =~ s/pattern1/pattern2/
s代表的意思为substitute,也就是替换;
例如
$opt_src =~ s/(.*?)\s*$/$1\//;
第一个pattern为:(.*?)\s*$
,这里小括号可以匹配任意字符,括号外的\s*$匹配的是以空白字符结尾;
第二个pattern为$1
,这里就是前面pattern1中小括号中所匹配到的内容;
所以这里的替换功能为:
将结尾的空白字符去掉并以**“/”**结尾
IO::File
首先通过下面的方法引用这个函数:
use IO::File;
用于生成新文件,并传递该文件的指针,例如
my $FILE= new IO::File;
open(FILE, "$file");
生成了一个文件指针FILE,接着可以使用open将该指针指向具体的文件,默认是读取,如下
```perl
open (FILE, "file_read");
open (FILE, ">> file_write")
这里默认为读取文件。
当该文件指针指向该文件后,可以将文件中的所有内容放到一个数组中,例如
my @lines = < FILE >;
接着可以使用foreach语句来访问这个文件中的内容,也就是一行一行得访问
foreach my $line (@lines) {...
}
qw
qw
可以直接生成一个array,并将其赋值给一个数组,例如
my @array = qw(damon zhenhua);
Glob
glob可以用于返回当前目录的文件夹和文件组成的一个array,例如
my @files = glob "*";
这样可以将当前目录下的文件和文件夹都放入该数组中;配合foreach循环就可以找到我们想要的文件或者文件夹了:
foreach my $file (@files) {if ($file =~ /pattern/) {&process_file($file);}
}
接着使用process_file这个函数对文件做进一步处理,我们将文件作为其参数传入:
并用于找出这个文件中出现的Error或者其他我们想要的信息:
sub process_file {my $subfile = @_;unless (-e $subfile) {print "$subfile not existed, please check\n";}my FILE = new IO::File;unless (open (FILE, $subfile)) {print "cant open $subfile\n";}my @lines = <FILE>;my $err_cnt = 0;foreach my $line (@lines) {if ($line =~ /Error/) {$err_cnt++;}}
}
Array
通过下面的方式可以声明一个数组:
my @arrary = qw(damon alex allen);
打印数组内的内容:
print "@array";
这样打印出的内容为:
damon alex allen
如果按照下面的方式打印
print @array;
那么打印出的结果为
damonalexallen
可以发现,原来array中的三个元素直接合并到一起了,中间无空格;
scalar
使用scalar这个命令可以获取数组的长度,例如
my $array_len = scalar @array;
$#
使用$#也可以获取数组的最后一个元素的index,例如
$#array;
push array
先声明一个空的array:
my @array;
然后使用push命令往数组添加元素:
my $name = "damon";
push @array $name;
特殊符号
@_
@_
是由sub子函数组成的array,一般可以这样使用
sub main {my @a;
my $b;
my (@a, $b) = @_;}
这样我们在使用sub子函数main时,其参数就会传递给array a和参数b了,例如
my @A = qw(damon alex allen);
my $B = "ZH";
&main(@A, $B);
perl 匹配
符号 | 用法 |
---|---|
\s | 匹配空白字符 |
\s* | 匹配空格多次 |
\S | 匹配非空白字符 |
\w | 匹配大小写英文字母,数字以及下划线,但是不能匹配空格 |
\d | 匹配数字 |
. | 匹配任意字符,不包括换行符 |
* | 量词,匹配零次或多次 |
+ | 量词,匹配1次或多次,不能是零次 |
? | 匹配前一个条目,出现一次或者不出现 |
[a-zA-Z0-9] + | 匹配大小写字母和数字一次或多次 |
反引号 | 用于在perl中执行shell的命令 |
工作常用
- #!后接的是用于解释这个文件的程序,例如 #!/usr/bin/perl
- 字符串可以用点号 . 连接起来
- x用于将其左边的字符串重复指定次数,例如“damon x 3”,结果为damondamondamon
- perl根据操作符来决定是数字还是字符串
- perl用$符号来表示标量
- print用于将内容输出到标准输出,也就是终端屏幕
- 如果标量从未被赋值过,那么会被认定为空字符串
- perl在处理长字符串时,可以用花括号将字符串包起来,避免歧义
if () {} else {}
或if () { } elsif () {} else {}
与TCL中不同,TCL中是 if {} else {};- 在判断真假时,如果是数字,那么0为假,其他的数字为真,如果是字符串,那么空字符串为假,其他字符串为真;
- 标准输入在perl中放在变量
<STDIN>
中,$line = <STDIN>
- chomp() 用于取掉字符串末尾的一个换行符,如果有两个,则只会删除一个
- chomp本质是一个函数,是有返回值的,其返回值是实际移出字符串的个数,如果字符串末尾没有换行符,则返回0
- 变量在首次赋值前,变量的初始值为undef,当成数字看的话,就是0,当成字符串来看,就是空字符串
- 在做累加时,可以对一个未赋值的变量做累加,其初始值为0
- 在读到文件末尾时,会返回一个undef
- 要判断一个字符串时候是undef,可以使用define函数,如果是undef,在返回0;
- 访问数组用[],访问hash用{}
- 假如下表超过数组的尾端,返回undef
- 假如对超过数组索引的数组元素进行赋值,则数据将自动延长
- 数组最后一个元素的索引值为
$#array
- 范围操作符…,从左边的数字一直计数到右边,每次加1,例如1…100;
- qw可以快速创建列表,可以配合()、{}、[]一起使用
- 可以将列表内的值赋值给变量,例如:
($a, $b, $c) = ("aaa", "bbb", "ccc")
,左边列表中的变量会被依次赋予右边的值; - 如果左边列表变量的个数小于右边列表的个数,则右边多出来的会被忽略,如果是大于,则左边多出来变量会被赋值为undef
- 使用@来引用一个数组
- -e可以告诉perl,后面是可供执行的代码,例如perl -pi -e “s/aaa/bbb/gi” test.txt
- 条件表达式可以放在前面和后面,他都会先执行
- ++自增写在变量前面,表示先增加自身的值,在将自身的值赋给其他变量;写在后面表示先赋值,在增加自身的值;
Perl Summary相关推荐
- centos8编译openssl-1.0.2u、openssl-1.1.1k
目录 一.给openssl-1.0.2u打包rpm 二.编译安装openssl-1.1.1k 三.给openssl-1.1.1k打包rpm(不推荐!) 近日openssl爆出拒绝服务.证书绕过漏洞,C ...
- 在 Linux 和 Windows 下源码安装 Perl
Perl 是一种功能丰富的计算机程序语言,运行在超过 100 种计算机平台上,适用广泛,从大型机到便携设备,从快速原型创建到大规模可扩展开发.在生物信息分析领域,Perl 主要是做数据预处理.文本处理 ...
- 如何处理错误消息Please install the gcc make perl packages
如何处理这行错误消息? Please install the gcc make perl packages from your distribution. 执行命令行:yum install gcc ...
- perl DBD Informix install and test
转载:http://heyiyi.blog.51cto.com/205455/1600615 1.安装Informix_Client_SDK 1)root用户登录,添加informix home目录. ...
- perl 一行命令 2021-09-02
生物信息入门常用 perl 'one-liner'–by CJ chen convert -delay 10 -resample 10% ls|perl -lane '/CJ\d{4}\d{4}(\d ...
- Perl Regular Expression Syntax Perl的正则表达式语法
Perl Regular Expression Syntax Perl的正则表达式语法 Synopsis 摘要 The Perl regular expression syntax is base ...
- perl dbd mysql 5.7_perl-DBD-MySQL 无法安装
问题描述: 在使用innobackupex 中出现了错误 -bash-4.1$ innobackupex --defaults-file=./my_3304.cnf --user=xtrabk --p ...
- Perl:化繁为简 (转载)
Perl:化繁为简 转载自 http://www.cnblogs.com/starspace/archive/2008/12/15/1355334.html 提高 Perl 代码的可靠性和可维护性的 ...
- perl语言入门第七版 电子版_百迈客带您走近生信分析【入门篇】
年末促销倒计时:59天 百迈客推出年末活动促销,发文有礼.推广有礼以及多种产品钜惠来袭,百迈客为您倾情打造科研福利,您还在等什么?快快行动起来领取您的超级奖励吧!(详情请见"决战2020!品 ...
最新文章
- Ouath 验证过程
- JavaScript--正则表达式
- 中国最难考的大学共有31所,分6大梯度,考上毕业很抢手
- 模拟http中需要注意到的headers字段
- vs2017c语言单元测试,vs2017单元测试没反应,检测出错误,有关详细信息,请查看“测试输出”窗口...
- Windows远程桌面(mstsc)不能复制粘贴的解决办法
- php去掉多字节字符,PHP 面试题 - 如果没有 mb 系列函数,如何切割多字节字符串...
- linux 命令 find -exec 操作的问题
- [转载] Python str方法
- 人工手摇机械式计算机,用袖珍式计算机处理螺旋伞齿轮调整卡
- 0 AD13安装破解与汉化
- 信息学奥赛一本通(C++版)在线评测系统 1887:【15NOIP提高组】神奇的幻方
- Python基础数据类型:字符串,列表,元组,集合,字典用法总结
- 被新手忽视的 自谐振频率点
- 什么是ANR,如何避免ANR
- 【全网详解】从0到1搭建双十一实时交易数据展示平台——Spark+Kafka构建实时分析系统
- python决策树分类案例_python实现决策树分类算法
- 把微信做成找券机器人,淘宝查券返利小助手实现方法分享
- 14.二维数组:什么是二维数组???
- 【R语言】使用nnet过程中报错Error in eval(predvars, data, env) : object ‘naulong‘ not found
热门文章
- 第一次作业:读博文有感
- go ip过滤_智慧识别“GOIP”呼转 罪犯无所遁形
- 江西省九江市谷歌高清卫星地图下载
- 破解Linux操作系统root 权限不能使用问题
- linux 星际争霸,让星际争霸在Linux操作系统下转起来
- 改变不了环境,学会改变自己!
- 麦当劳中国推出全新平台“麦麦夜市”;美联航订购5000万加仑可持续航空燃料 | 美通企业日报...
- 线阵相机参数设置和原理解释 (转载)很棒。
- 大学计算机软件专业生应该学什么
- 使用muscle多序列比对