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开始,也就是获取数组的长度;

$_是默认控制变量,可以省略,foreachwhile的默认控制变量都是$_;如果我们没有告知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的命令

工作常用

  1. #!后接的是用于解释这个文件的程序,例如 #!/usr/bin/perl
  2. 字符串可以用点号 . 连接起来
  3. x用于将其左边的字符串重复指定次数,例如“damon x 3”,结果为damondamondamon
  4. perl根据操作符来决定是数字还是字符串
  5. perl用$符号来表示标量
  6. print用于将内容输出到标准输出,也就是终端屏幕
  7. 如果标量从未被赋值过,那么会被认定为空字符串
  8. perl在处理长字符串时,可以用花括号将字符串包起来,避免歧义
  9. if () {} else {}if () { } elsif () {} else {}与TCL中不同,TCL中是 if {} else {};
  10. 在判断真假时,如果是数字,那么0为假,其他的数字为真,如果是字符串,那么空字符串为假,其他字符串为真;
  11. 标准输入在perl中放在变量<STDIN>中,$line = <STDIN>
  12. chomp() 用于取掉字符串末尾的一个换行符,如果有两个,则只会删除一个
  13. chomp本质是一个函数,是有返回值的,其返回值是实际移出字符串的个数,如果字符串末尾没有换行符,则返回0
  14. 变量在首次赋值前,变量的初始值为undef,当成数字看的话,就是0,当成字符串来看,就是空字符串
  15. 在做累加时,可以对一个未赋值的变量做累加,其初始值为0
  16. 在读到文件末尾时,会返回一个undef
  17. 要判断一个字符串时候是undef,可以使用define函数,如果是undef,在返回0;
  18. 访问数组用[],访问hash用{}
  19. 假如下表超过数组的尾端,返回undef
  20. 假如对超过数组索引的数组元素进行赋值,则数据将自动延长
  21. 数组最后一个元素的索引值为$#array
  22. 范围操作符…,从左边的数字一直计数到右边,每次加1,例如1…100;
  23. qw可以快速创建列表,可以配合()、{}、[]一起使用
  24. 可以将列表内的值赋值给变量,例如: ($a, $b, $c) = ("aaa", "bbb", "ccc"),左边列表中的变量会被依次赋予右边的值;
  25. 如果左边列表变量的个数小于右边列表的个数,则右边多出来的会被忽略,如果是大于,则左边多出来变量会被赋值为undef
  26. 使用@来引用一个数组
  27. -e可以告诉perl,后面是可供执行的代码,例如perl -pi -e “s/aaa/bbb/gi” test.txt
  28. 条件表达式可以放在前面和后面,他都会先执行
  29. ++自增写在变量前面,表示先增加自身的值,在将自身的值赋给其他变量;写在后面表示先赋值,在增加自身的值;

Perl Summary相关推荐

  1. 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 ...

  2. 在 Linux 和 Windows 下源码安装 Perl

    Perl 是一种功能丰富的计算机程序语言,运行在超过 100 种计算机平台上,适用广泛,从大型机到便携设备,从快速原型创建到大规模可扩展开发.在生物信息分析领域,Perl 主要是做数据预处理.文本处理 ...

  3. 如何处理错误消息Please install the gcc make perl packages

    如何处理这行错误消息? Please install the gcc make perl packages from your distribution. 执行命令行:yum install gcc ...

  4. perl DBD Informix install and test

    转载:http://heyiyi.blog.51cto.com/205455/1600615 1.安装Informix_Client_SDK 1)root用户登录,添加informix home目录. ...

  5. perl 一行命令 2021-09-02

    生物信息入门常用 perl 'one-liner'–by CJ chen convert -delay 10 -resample 10% ls|perl -lane '/CJ\d{4}\d{4}(\d ...

  6. Perl Regular Expression Syntax Perl的正则表达式语法

    Perl Regular Expression Syntax Perl的正则表达式语法  Synopsis 摘要  The Perl regular expression syntax is base ...

  7. perl dbd mysql 5.7_perl-DBD-MySQL 无法安装

    问题描述: 在使用innobackupex 中出现了错误 -bash-4.1$ innobackupex --defaults-file=./my_3304.cnf --user=xtrabk --p ...

  8. Perl:化繁为简 (转载)

    Perl:化繁为简 转载自  http://www.cnblogs.com/starspace/archive/2008/12/15/1355334.html 提高 Perl 代码的可靠性和可维护性的 ...

  9. perl语言入门第七版 电子版_百迈客带您走近生信分析【入门篇】

    年末促销倒计时:59天 百迈客推出年末活动促销,发文有礼.推广有礼以及多种产品钜惠来袭,百迈客为您倾情打造科研福利,您还在等什么?快快行动起来领取您的超级奖励吧!(详情请见"决战2020!品 ...

最新文章

  1. Ouath 验证过程
  2. JavaScript--正则表达式
  3. 中国最难考的大学共有31所,分6大梯度,考上毕业很抢手
  4. 模拟http中需要注意到的headers字段
  5. vs2017c语言单元测试,vs2017单元测试没反应,检测出错误,有关详细信息,请查看“测试输出”窗口...
  6. Windows远程桌面(mstsc)不能复制粘贴的解决办法
  7. php去掉多字节字符,PHP 面试题 - 如果没有 mb 系列函数,如何切割多字节字符串...
  8. linux 命令 find -exec 操作的问题
  9. [转载] Python str方法
  10. 人工手摇机械式计算机,用袖珍式计算机处理螺旋伞齿轮调整卡
  11. 0 AD13安装破解与汉化
  12. 信息学奥赛一本通(C++版)在线评测系统 1887:【15NOIP提高组】神奇的幻方
  13. Python基础数据类型:字符串,列表,元组,集合,字典用法总结
  14. 被新手忽视的 自谐振频率点
  15. 什么是ANR,如何避免ANR
  16. 【全网详解】从0到1搭建双十一实时交易数据展示平台——Spark+Kafka构建实时分析系统
  17. python决策树分类案例_python实现决策树分类算法
  18. 把微信做成找券机器人,淘宝查券返利小助手实现方法分享
  19. 14.二维数组:什么是二维数组???
  20. 【R语言】使用nnet过程中报错Error in eval(predvars, data, env) : object ‘naulong‘ not found

热门文章

  1. 第一次作业:读博文有感
  2. go ip过滤_智慧识别“GOIP”呼转 罪犯无所遁形
  3. 江西省九江市谷歌高清卫星地图下载
  4. 破解Linux操作系统root 权限不能使用问题
  5. linux 星际争霸,让星际争霸在Linux操作系统下转起来
  6. 改变不了环境,学会改变自己!
  7. 麦当劳中国推出全新平台“麦麦夜市”;美联航订购5000万加仑可持续航空燃料 | 美通企业日报...
  8. 线阵相机参数设置和原理解释 (转载)很棒。
  9. 大学计算机软件专业生应该学什么
  10. 使用muscle多序列比对