在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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 755 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 (1 == 1); #简写 while( ){ $count++; } for($i; $i <= 10; $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 = (1..10) @b = (1..10, 21..30) @list=(aa..zz); 创建数组:用列表()创建数组 引用数组:用方括号[ ]下标引用数组 创建哈希:用列表()创建哈希,为了好看,键值对以=>形式组织;也可以单个创建 引用哈希:用花括号{}引用哈希
数组操作
@name = (1..10); @b = @name[2,4,6]; 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,对其进行操作。
模式匹配规则:
#//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{5,10}/ #好理解 /x{9,}/ #最少9次 /x{0,4}/ #0次(不出现),最多9次 /x{8}/ #刚好8次 /first.*last/ #可以匹配所有字符,包括所有 匹配方括号内中的任意字符(括号内的通配符^*等会失去原有的意义) [abcde] #匹配其中任何一个字符 [a-e] #同上[0-9]+ #顺序匹配一个或多个数字 [A-Za-z]{5} #匹配任何一组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{5})/; 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 = 0; 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($_)>2, @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()
命令行
上下文
chompchomp是运算符,可以用圆括号,也可以用空格;它会改变参数变量,其返回值是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.0.tar.gz cd perl-5.10.0 ./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 |
请发表评论