1. perl -MCPAN -e shell

install Bio::SeqIO

  

或者直接perl -MCPAN -e 'install Excel::Writer::XLSX'

用cpan装不上,编译有问题,尝试用conda,成功安装。

  1. conda install -c bioconda perl-bioperl  

然后还需要导出perllib,让perl能找到指定的pm包。

同时学perl、python和shell脚本会很容易将它们的语法搞混,本文主要是一个个人的总结,方便要用时的查询。

perl基本语法、安装、帮助文档


文件头格式:

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

运行perl脚本:

  1. #调用perl程序
  2. perl test.pl
  3. #可执行脚本
  4. chmod test.pl
  5. ./test.pl

基本读写:

  1. #键盘输入
  2. $a = <STDIN>;
  3. chomp($a);
  4. print $a;
  5.  
  6. #文件输入
  7. open(IN, "<test.txt") or die "Cannot open file:$!\n";
  8. open(OUT, ">test.txt") or die "Cannot open file:$!\n";
  9. while(<IN>){
  10. chomp;
  11. print OUT "1. $_";
  12. last;
  13. };
  14. close(IN);
  15. close(OUT);

基本控制流:

  1. if( ){
  2.  
  3. }elsif( ){
  4.  
  5. }else{
  6.  
  7. }
  1. print "Hello!" if ( == ); #简写
  1. while( ){
  2. $count++;
  3. }
  4.  
  5. for($i; $i <= ; $i++){
  6.  
  7. }
  8.  
  9. foreach (@array){
  10. print $_;
  11. }
  1. last; #break
  2. next; #continue

数据结构:标量变量($),列表(),数组(@),哈希(%),文件句柄(<>)

语法结构:语句以分号(;)结束,代码块使用花括号{}划分,动态语言不必指明变量类型

单双引号:单引号q(),所有原样输出;双引号qq(),允许插入变量

语法惯例:perl中很多地方括号()是可有可无的,特别是内置函数,如print、split等;可以使用递增递减运算符

安装:Windows装Active版本,(perl -v)检查;linux装,

  1. $ tar -zxvf stable.tar.gz -C dir
  2. $ sh Configure # 配置
  3. $ make # 安装
  4. $ make test #测试是否make成功
  5. $ make install

帮助文档:perldoc命令

  1. perldoc #会提示用法
  2. perldoc perl #会显示详细用法
  3. perldoc perlfunc #三大模块
  4. perldoc perlop
  5. perldoc perlfaq

建议使用浏览器查看本地的HTML文档:

查找索引


正则表达式(/ /、$1、=~、!~);模式替换(=~ s/ /);模式匹配规则;修饰符i和全局匹配g;grep函数(搜索数组)

键盘输入(<STDIN>, chomp);

函数(split、length、join、map、grep)

作用域(my、our、local)

perl版本更新与多版本安装

特殊变量

$_:默认参数,就是当前的默认操作参数,在读文件<FILE>、迭代for (@array)、split / /、print中非常重要

$!:标准错误输出,一般只与or die语句连用

$1:正则表达式模式中第一个括号内的变量,如(.*)、(string),以此类推

@_:sub函数传递的参数数组,

字符串运算符

连接字符串:并置运算符(.)

转义:反斜杠\

区分标量和字符串:{}显示指定变量名,如${name}space

重复运算符(x),如“-”x 10

数组、哈希

列表:列表是常量,由圆括号()创建,中间用逗号隔开

  1. # 范围运算符
  2. @a = (..)
  3. @b = (.., ..)
  4. @list=(aa..zz);

创建数组:用列表()创建数组

引用数组:用方括号[ ]下标引用数组

创建哈希:用列表()创建哈希,为了好看,键值对以=>形式组织;也可以单个创建

引用哈希:用花括号{}引用哈希

数组操作

  1. @name = (..);
  2. @b = @name[,,];
  3. print "my name is ";
  4. print "$#b";

(数值/字符串)比较

数字比较:(==、>、<、>=、<=、!=)

字符串比较:(eq、gt、lt、ge、le、ne)

print用法

print:可以直接接变量$var、@array、%hash,输出的就是不带空格回车,将所有元素连在一起,数组一坨,哈希一坨,其中哈希顺序是乱的。

print:可以带双引号,数组之间有空格,可以分辨了;哈希失效了,没有内容,就显示出%hash。

print:输出到文件时,文件句柄在前,中间是空格(不能是逗号),后面是输出内容

q()、qq()、qw()、qx{}

q():用单引号将内容括起来

qq():用双引号将内容括起来

qw():用单引号将空格隔开的序列组装成数组,会屏蔽里面的标量

  1. # 两者等价,最好不要有内嵌变量
  2. @a = qw(abc def ghi)
  3. @b = ('abc','def','ghi')

qx{ }:捕获命令输出

  1. $directory = `dir`;
  2. $directory_2 = qx{dir};

正则表达式、模式、替换、匹配规则、grep函数(完)


元字符(简单元字符、转义字符、通配符、字符类、分组和选择、位置通配符)

替换(s/ / /)

修饰符 i 和 全局匹配 g

用于识别输入流中的特定模式,一般是(/ /),m可以省略,$_是默认匹配对象,指定匹配对象用(=~),$1用于取出第一个括号内匹配

  1. #模式里可以有标量变量
  2. $name = "lizhixin";
  3. $surname = "li";
  4. print "yes, $1" if $name =~ /($surname)/;

模式匹配用途有二:1.条件判断,用在if语句里;2.取出匹配上的模式,$1,对其进行操作。

  • 默认正则表达式是返回真假,可用于条件判断;
  • 如果加入括号(),就可以用$1、$2…访问相应模式,将()()()等赋值给数组;或者用/ /g赋值给数组,选出所有模式种类

模式匹配规则:

  • 从左向右依次匹配
  • 找到一个匹配项就返回真
  • 尽可能多的寻找能够匹配的字符(不代表会全部输出,除非像下面一样指定,默认是输出第一个匹配上的
  1. #//g能够输出所有的匹配项
  2. $name = "lizhiixiii";
  3. @result = $name =~ /(i+)/g;
  4. print "@result";
  1. # i ii iii

圆点(.):匹配除换行符外的所有单个字符;通常是(*.)连用,匹配所有;(.与其前面的字符无关,可出现在任意位置)

  1. $a="lizhiiiixin";
  2. print "$1" if $a =~ /(i.x)/; # iix
  1. (+):前面的字符要+(1~N次)(不能没有i,一个i是底线)(必须存在前面的字符
  1. $a="lizhiiiixin";
  2. print "$1" if $a =~ /(i+x)/; # iiiix
  1. (*):前面的字符要存在0次或多次(可以没有前面的i)(必须存在前面的字符
  1. $a="lizhiiiixin";
  2. print "$1\n" if $a =~ /(i*x)/; # iiiix
  3. print "$1\n" if $a =~ /(l*i)/; # li
  1. (?):前面的字符进行0次或一次匹配(必须存在前面的字符
  1. $a="l1zhhiixin";
  2. print "$1\n" if $a =~ /(hi?)/; # h
  1. {n, m} # n:匹配的最小次数;m:匹配的最大次数
  1. /x{,}/ #好理解
  2. /x{,}/ #最少9次
  3. /x{,}/ #0次(不出现),最多9次
  4. /x{}/ #刚好8次
  1. /first.*last/ #可以匹配所有字符,包括所有

匹配方括号内中的任意字符(括号内的通配符^*等会失去原有的意义)

  1. [abcde] #匹配其中任何一个字符
  2. [a-e] #同上[0-9]+ #顺序匹配一个或多个数字
  3. [A-Za-z]{} #匹配任何一组5个字母字符[^A-Z] #不匹配A-Z中的任何单个字符
  1. 字符类快捷方式
  1. \w #一个单词字符,同[a-zA-Z0-9_]
  2. \W #与\w相反
  3. \d #一个数字,与[0-9]相同
  4. \D #与\d相反
  5. \s #一个白空间字符,同[\t\f\r\n]
  6. \S #与\s相反
  1. # 使用字符类快捷方式\d\w+等
  2. $name = "li12345 zhi xin";
  3. print "$1\n" if $name =~ /(\d{})/;
  4. print "$1\n" if $name =~ /(\s\w+\s)/;

分组和选择(找任意一种模式,或)

  1. print "yes\n" if (/dogs|cats/);
  2. print "yes\n" if (/(fr|b|fl|cl)og/);
  3. ($one, $two) = /(.*)\sis\s(.*)/;

位置通配符

  1. /^Help/ #只匹配Help开头的行
  2. /^one.*two$/ #只匹配one开头和two结尾的行
  3. /^only$/ #只匹配包含only的行
  4. /^$/ #匹配空行
  5. /^/ #匹配非空行
  1. #不匹配
  2. if($a !~ /zi/){
  3. print "not match.\n";
  4. }
  1. print "yes\n" if(m/Piglet/); # 如果使用的是斜杠//,那么m可以省略
  1. $_="apple is red";
  2. ($fruit, $color) = /(.*)\sis\s(.*)/;

正则匹配可能会有多种可能的匹配位点,但有时只返回一种最合适的匹配结果,请问这个结果是如何选出来的?(核心问题)

  1. $a = "one fish, two frog, red fred, blue foul";
  2. @F = $a =~ /(f\w\w\w)/g;

替换(返回匹配的数量)

  1. $a = "lizhizhixin";
  2. print "$a\n";
  3. $a =~ s/zhi/xin/; #只替换第一个匹配到的模式
  4. print "$a\n";

修饰符(/ /i)与多次匹配(/ /g)

  1. $name = "LiZhixin";
  2. print "yes, $1" if $name =~ /(^li)/i; # yes, Li
  1. $seq = "ATCTGCAATTTCCTA";
  2. $numA = ;
  3. while ($seq =~ /T/g){
  4. $numA++;
  5. }
  6. print "$numA\n";

grep函数(搜索数组,返回匹配元素或者修改匹配元素,条件可以使正则表达式或是其他条件)

  1. @name = qw(li zhi xin);
  2. @result = grep(/^[^l]/, @name);
  3. print "@result"; # zhi xin
  1. @result = grep(s/i/o/, @name);
  2. print "@result"; # lo zho xon
  1. @result = grep(length($_)>, @name);
  2. print "@result"; # zhi xin

函数

标准函数格式:

常用内置函数

split

int(5.20);

length(“nose”);

lc(“ME TOO”);

uc(“hal 9000”);

cos(50);

rand(5)

堆栈操作函数

push()

pop()

shift():将最后一个元素移走,常用语处理函数参数

unshift()

命令行

上下文

chomp

chomp是运算符,可以用圆括号,也可以用空格;它会改变参数变量,其返回值是1或0

  1. $a = "lizhiixn\n";
  2. print $a;
  3. print "next\n";
  4. chomp $a;
  5. print $a;
  6. print "next";
  1. $b = chomp($a); #极少这么用

perl版本更新与多版本安装

自己做服务器最好用Ubuntu,apt-get用着很方便,版本更新可以用系统自带的软件更新

Linux没有注册表,软件安装相对独立,理论上所有软件都是绿色版,只是稍微需要配置环境变量和软链接

或者安装多个版本,然後修改/usr/bin/perl的symbolic link到/usr/local/bin/perl,软连接的指向问题

  1. tar zxvf perl-5.10..tar.gz
  2. cd perl-5.10.
  3. ./Configure -des -Dprefix=/usr/local/perl # 参数-Dprefix指定安装目录为/usr/local/perl
  4. make
  5. make test
  6. make install
  1. mv /usr/bin/perl/ usr/bin/perl.bak # 替换系统原有的perl
  2. ln -s /usr/local/perl/bin/perl/ usr/bin/perl
  3. perl v
  4.  
  5. perl -MCPAN-e shell # 安装一些其它perl模块
  6. #第一次执行的话,会提示安装cpan并要求连接网络下载最新的模块列表.然后就可以安装东西了
  7. cpan> install DBI

perl 语法速查 | 模块安装的更多相关文章

  1. perl 语法速查

    同时学perl.python和shell脚本会很容易将它们的语法搞混,本文主要是一个个人的总结,方便要用时的查询. perl基本语法.安装.帮助文档 文件头格式: #!/usr/bin/perl us ...

  2. Markdown 语法速查表

      Markdown 语法速查表 1 标题与文字格式 标题 # 这是 H1 <一级标题> ## 这是 H2 <二级标题> ###### 这是 H6 <六级标题> 文 ...

  3. Python语法速查: 4. 字符串常用操作

    返回目录 (1)字符串常用方法 Python3中,字符串全都用Unicode形式,所以省去了很多以前各种转换与声明的麻烦.字符串属于序列,所有序列可用的方法(比如切片等)都可用于字符串. 注意:字符串 ...

  4. Python语法速查:目录

    1. 数据类型与内置函数 2. 列表.元组.字典.集合操作 3. 字符串格式化 4. 字符串常用操作 5. 运算符.math模块.表达式 6. 循环与迭代 7. 函数基础 8. 类与对象 9. 函数进 ...

  5. IE各版本CSS Hack(兼容性处理)语法速查表

    为了兼容IE各个版本,需要在CSS中添加额外的代码,比如以前常用的_width.之所以工作,是因为浏览器会忽略不能解析的样式规则,因此举个例子来说,把_width写在width下面,对于非IE浏览器会 ...

  6. Python语法速查: 5. 运算符、math模块、表达式

    返回目录 (1)一些较容易搞错的运算符 一般简单的如加减乘除之类的运算符就不写了,这里主要列些一些容易搞错或忘记的运算符.运算符不仅仅只有号,有一些英文单词如 in, and 之类,也是运算符,并不是 ...

  7. Python语法速查: 12. 文件与输入输出

    返回目录 (1)文件基本操作 ● 文件常用操作 内置函数或方法 描述 open(name [,mode [,buffering]]) 内置函数.用来打开文件,返回一个文件对象(file对象).详见下述 ...

  8. Python语法速查: 15. 常用数据结构

    返回目录 本篇索引 (1)array (2)bisect (3)deque (4)defaultdict (5)namedtuple (6)heapq (7)itertools (1)array ar ...

  9. Python语法速查: 13. 操作系统服务

    返回目录 本篇索引 (1)sys模块 (2)os模块 (3)与Windows相关模块 (4)subprocess模块 (5)signal模块 (1)sys模块 sys模块用于Python解释器及其环境 ...

随机推荐

  1. django操作mysql

    连接mysql 1.安装pymysql 操作指令 : pymsql: pip install pymysql 2.导入库 在项目目录下的__init__.py文件中导入pymysql模块 加入以下两行 ...

  2. Ubuntu armhf 版本国内源

    Ubuntu armhf 版本国内源: deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted u ...

  3. Django之路——2 Django的安装

    Django的安装分为两种方式,一种是命令行安装,另外一种是pycharm安装.在这里只说一种在命令行里面安装的 1.命令行安装 这个自不必多说,直接上干货,如果遇到pip版本过低,安装失败的,请自自 ...

  4. Java锁--Semaphore

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3534050.html Semaphore简介 Semaphore是一个计数信号量,它的本质是一个&quo ...

  5. 关于LinkedList for OpenJDK

    概述      LinkedList采用底层采用双向链表结构,与ArrayList的数组结构不一样.LinkedList因数据结构不一样,不需要申请连续内存,可以利用碎片内存.元素保存数据内容外还需要 ...

  6. 第四章 初始CSS

    一.引入样式 1.行内样式表 <h1 style="color: red;font-size: 18px;">10-30</h1> 2.内部样式表(在hea ...

  7. 【Winfrom-无边框窗体】Winform如何拖动无边框窗体?

    去掉边框 this.FormBorderStyle = FormBorderStyle.None; 方法一: Point mouseOff;//鼠标移动位置变量 bool leftFlag;//标签是 ...

  8. win32窗口程序分析

    1.分析消息的附加参数 例如:为了查看程序处理了哪些消息   在回调函数中调用输出函数,在控制台中输出消息的值:

  9. HTML 005 段落

    HTML 段落 HTML 可以将文档分割为若干段落. HTML 段落 段落是通过 <p> 标签定义的. 实例 <p>这是一个段落 </p> <p>这是另 ...

  10. 学到了林海峰,武沛齐讲的Day23-完

    10月11号生了儿子,很高心..不好的是孩子住院了,14号出院,晚上外公去世了,15号赶回老家.....20号回贵阳,21号回公司办事....我要坚定的学习下去...以前几乎是卡在这里就学不下去了.加 ...