perl -MCPAN -e shell

install Bio::SeqIO

  

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

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

conda install -c bioconda perl-bioperl  

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

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

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


文件头格式:

#!/usr/bin/perl
use strict;
use warnings;

运行perl脚本:

#调用perl程序
perl test.pl
#可执行脚本
chmod test.pl
./test.pl

基本读写:

#键盘输入
$a = <STDIN>;
chomp($a);
print $a; #文件输入
open(IN, "<test.txt") or die "Cannot open file:$!\n";
open(OUT, ">test.txt") or die "Cannot open file:$!\n";
while(<IN>){
chomp;
print OUT "1. $_";
last;
};
close(IN);
close(OUT);

基本控制流:

if( ){

}elsif( ){

}else{

}
print "Hello!" if ( == );  #简写
while( ){
$count++;
} for($i; $i <= ; $i++){ } foreach (@array){
print $_;
}
last;   #break
next; #continue

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

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

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

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

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

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

帮助文档:perldoc命令

perldoc  #会提示用法
perldoc perl #会显示详细用法
perldoc perlfunc #三大模块
perldoc perlop
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

数组、哈希

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

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

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

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

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

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

数组操作

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

(数值/字符串)比较

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

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

print用法

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

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

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

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

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

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

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

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

qx{ }:捕获命令输出

$directory = `dir`;
$directory_2 = qx{dir};

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


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

替换(s/ / /)

修饰符 i 和 全局匹配 g

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

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

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

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

模式匹配规则:

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

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

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

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

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

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

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

位置通配符

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

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

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

替换(返回匹配的数量)

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

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

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

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

@name = qw(li zhi xin);
@result = grep(/^[^l]/, @name);
print "@result"; # zhi xin
@result = grep(s/i/o/, @name);
print "@result"; # lo zho xon
@result = grep(length($_)>, @name);
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

$a = "lizhiixn\n";
print $a;
print "next\n";
chomp $a;
print $a;
print "next";
$b = chomp($a);  #极少这么用

perl版本更新与多版本安装

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

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

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

tar zxvf perl-5.10..tar.gz
cd perl-5.10.
./Configure -des -Dprefix=/usr/local/perl # 参数-Dprefix指定安装目录为/usr/local/perl
make
make test
make install
mv /usr/bin/perl/ usr/bin/perl.bak   # 替换系统原有的perl
ln -s /usr/local/perl/bin/perl/ usr/bin/perl
perl –v perl -MCPAN-e shell # 安装一些其它perl模块
#第一次执行的话,会提示安装cpan并要求连接网络下载最新的模块列表.然后就可以安装东西了
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. 如何在SAP云平台ABAP编程环境里创建自己的Z表

    选中ABAP包,右键创建一个新的Database Table: 维护表名为ZBOOKING: 表实现的源代码: @EndUserText.label : 'Jerry''s booking' @Aba ...

  2. 铰链joints

    Fixed Joint原理像阶层里的父子结构.关节会将对象锁在一个世界坐标或者锁在一个连接的刚体. 固定关节可以设定断裂力道(Break Farce)和断裂扭力(Break torque),破坏关节所 ...

  3. springboot系列(八)springboot整合mybatis

    本篇介绍一下在springboot中整合mybatis ,使用mysql数据库,集成durid 连接池技术,全部代码是手动生成,没有使用代码生成器来构建代码. 一.创建数据库和表 二.在pom中添加依 ...

  4. pytorch版yolov3训练自己数据集

    目录 1. 环境搭建 2. 数据集构建 3. 训练模型 4. 测试模型 5. 评估模型 6. 可视化 7. 高级进阶-网络结构更改 1. 环境搭建 将github库download下来. git cl ...

  5. Python + Selenium 主要实现的功能

    selenium 技术 元素定位的几种方法 WebDriver API ,selenium IDE,selenium grid python 技术 函数.类.方法: 读写文件, unitest单元测试 ...

  6. WARNING: 'automake-1.14' is missing on your system.

    检查发现其实已经安装了automake,只不过版本是automake-1.15.1 $ automake --version automake (GNU automake) 1.15.1 解决方法一  ...

  7. django命令行安装和卸载

    1. 在dos命令行中输入 pip 如下命令进行安装: 安装最新的版本的 Django 命令如下: pip install django 安装 指定版本的 Django 命令如下: pip insta ...

  8. 人们为什么在Python脚本的第一行上编写#!/ usr / bin / env python shebang?

    在我看来,如果没有该行,文件运行相同. #1楼 您可以使用virtualenv尝试此问题 这是test.py #! /usr/bin/env python import sys print(sys.v ...

  9. Codeforces Round #413 (Div1 + Div. 2) C. Fountains(树状数组维护最大值)

    题目链接:https://codeforces.com/problemset/problem/799/C 题意:有 c 块硬币和 d 块钻石,每种喷泉消耗硬币或钻石中的一种,每个喷泉有一个美丽值,问建 ...

  10. Longest Continuous Increasing Subsequence

    Description Give an integer array,find the longest increasing continuous subsequence in this array. ...