生 物 信 息 学 Bioinformatics 巩晶 癌症研究中心 山东大学 医学院 2016.5.23
编程基础第二部分
2. Perl – What is Perl ? http://www.perl.org Practical Extraction and Report Language Interpreted Language Optimized for String Manipulation and File I/O Full support for Regular Expressions
2. Perl – Running Perl Scripts Download ActivePerl from ActiveState Just run the script from a 'Command Prompt' window or a ‘Terminal' Put the following in the first line of your script #!/usr/bin/perl or #!C:/Strawberry/perl/bin/perl.exe Run the script perl script_name.pl
2. Perl – Basic Syntax Statements end with semicolon ‘;’ Comments start with ‘#’ Only single line comments Variables You don’t have to declare a variable before you access it You don't have to declare a variable's type
2. Perl – Scalars and Identifiers A variable name Case sensitive Scalar A single value (string or numerical) Accessed by prefixing an identifier with '$' Assignment with '=' $scalar = expression
2. Perl – Strings Quoting Strings With ' (apostrophe) Everything is interpreted literally With " (double quotes) Variables get expanded With ` (backtick) The text is executed as a separate process, and the output of the command is returned as the value of the string $output='Hello\nWorld!'; print $output; $output="Hello\nWorld!"; print $output; print `java -version`;
2. Perl – Comparison Operators String Operation Arithmetic lt less than < gt greater than > eq equal to == le less than or equal to <= ge greater than or equal to >= ne not equal to != cmp compare, return 1, 0, -1 <=> 0 1 2 3 4 5 6 7 8 9 符号 A B C … X Y Z a b c … x y z 由 小 到 大
2. Perl – Logical Operators Operation ||, or logical or &&, and logical and !, not logical not xor logical xor a xor b = (a' and b) or (a and b')(a'为非a)
2. Perl – String Operators Operation . string concatenation x string repetition .= concatenation and assignment $string1 = "potato"; $string2 = "head"; $newstring = $string1 . $string2; #"potatohead" $newerstring = $string1 x 2; #"potatopotato" $string1 .= $string2; #"potatohead"
2. Perl – Perl Functions Perl functions are identified by their unique names (print, chop, close, etc) Function arguments are supplied as a comma separated list in parenthesis. The commas are necessary The parentheses are often not Be careful! You can write some nasty and unreadable code this way!
指令:length 语法:length($string) 说明:求出字符串$string的字节(bytes)值。 示例:$string="Perl5"; $size=length($string); #这时$size=5; 指令:substr 语法:substr($string,offset,length) offset代表起始字符的位置,length代表引用的字符串长度,如果省略length则代表从起始值到字符串的最后一个字符长度。而offset如果是负值的话,就会从字符串右边开始指定字符。(字符串中第一个字符的位置为0,不是1) 示例: $s=substr("perl5",2,2); #这时$s="rl"; $s=substr("perl5",2); #这时$s="rl5"; $s=substr("perl5",-2,2); #这时$s="er"; 指令:index 语法:index($string,$substring,position) $substring是要寻找的字符;position代表从哪一个位置开始寻找,假如省略position就从头开始找起。 说明:返回所要找寻的字符在一字符串$string中的位置,如果在字符串中找不到字符的话,则会返回-1这个值。 示例: $s=index("perl5","p"); #这时$s=0 $s=index("perl5","l",2); #这时$s=3 $s=index("perl5","pell"); #这时$s=-1
2. Perl - Arrays Array Operators A named list Dynamically allocated, can be saved Zero-indexed Shares list operations, and adds to them Array Operators @: reference to the array (or a portion of it, with []) $: reference to an element (used with []) Eg. @arr = ("A", "T", "C", "G"); print $arr[2]; print @arr[1,3]; print @arr; print "@arr"; $x = @arr; 返回@arr中元素的个数
指令:scalar 语法:scalar(@array) 说明:返回数组@array中的元素的个数。 示例:@back =("A","B","C"); $num=scalar(@back); #这时$num=3; 指令:reverse 语法:reverse(@array) 说明:将数组@array中的元素由后到前重新排列。 示例:@back=("A","B","C","D","E"); @back=reverse(@back); #这时@back=("E","D","C","B","A"); 指令:sort 语法:sort(@array) 说明:将数组中的元素由小到大排序,如果要由大到小排序的话,要加上reverse这个函数。 示例: @abc=("d","b","c","a"); @abc=sort(@abc); #这时@abc=("a","b","c","d"); @abc=reverse(sort@abc); #这时@abc=("d","c","b","a"); 指令:pop 语法:pop(@array) 说明:将数组(@array)的最后一个元素删除,并将删除的元素返回。 示例:@array=("one","two"); $rm=pop(@array); #这时@array=("one");而$rm="two";
指令:shift 语法:shift(@array) 说明:将数组@array的第一个元素删除,并将删除的元素返回。 示例:@array=("one","two"); $rm=shift(@array); #这时@array=("two");而$rm="one"; 指令:push 语法:push(@array,$newelement/@newarray) 说明:在数组@array的最后加新的元素到数组@array中。 示例:@array=("one","two"); push(@array,"three"); #这时@array=("one","two","three") 指令:unshift 语法:unshift(@array,$newelement/@newarray) 说明:在数组@array的第一个元素前附加新的元素到数组@array中。 示例:@array=("one","two"); unshift(@array,"three"); #这时@array=("three","one","two") 指令:join 语法:join($string,@array) 说明:在一数组@array的元素之间加上一指定的字符$string,并将结果返回。 示例:@array=("one","two","three"); $total=join(":",@array); 这时$total="one:two:three";
Array Example #!/usr/bin/perl # Simple List operations # Address an element in the list @stringInstruments = ("violin","viola","cello","bass"); @brass = ("trumpet","horn","trombone","euphonium","tuba"); $biggestInstrument = $stringInstruments[2]; print("The biggest instrument: ", $biggestInstrument, "\n"); # Join elements at positions 0, 1, 2 and 4 into a white-space delimited string print("orchestral brass: ", join(" ",@brass[0,1,2,4]), "\n"); ################################ @unsorted_num = ('3','5','2','1','4'); @sorted_num = sort( @unsorted_num ); # Sort the list print("Numbers (Sorted, 1-5): ", @sorted_num, Array Example #Add a few more numbers @numbers_10 = @sorted_num; push(@numbers_10, ('6','7','8','9','10')); print("Numbers (1-10): ", @numbers_10, "\n"); # Remove the last pop(@numbers_10); print("Numbers (1-9): ", # Remove the first shift(@numbers_10); print("Numbers (2-9): ", # Combine two ops print("Count elements (2-9): ", scalar( @numbers_10 ),
2. Perl – if 语句 #!/usr/bin/perl $a=10; $b=15; if ($a > $b) { print "a=$a is bigger!"; } else { print "b=$b is bigger!"; } ########### if ($a == 5) { print '$a is 5'; } elsif ($a == 10) { print '$a is 10'; } elsif ($a == 15) { print '$a is 15'; } { print '$a is not (5 or 10 or 15)'; } if 和 else 可以不成对出现,即,可以只有if没有else elsif可以有许多个
2. Perl – for 语句 #!/usr/bin/perl @a=(1,12,33,25,98,34,55,76,18,10); $n=scalar(@a); for ($i=0; $i<$n; $i++) { print "No.$i = $a[$i]\n";} ############ foreach (@a) { if ($_ % 2 == 0) { print "$_ is even. \n";} else { print "$_ is odd. \n";} } foreach语句中,用$_代表抓到的每一个当前变量。
2. Perl – Pattern Matching A pattern is a sequence of characters to be searched for in a character string /pattern/ Match operators =~: tests whether a pattern is matched !~: tests whether patterns is not matched Match & Substitute Match: m/pattern/ or /pattern/ Substitute: s/pattern1/pattern2/
2. Perl – Pattern Matching 升级的 BLAST: PHI-BLAST PHI-BLAST (Pattern-Hit Initiated BLAST, 模式识别BLAST) : 能找到与查 询序列相似的并符合某种模式(pattern)的蛋白质序列。 符合模式: [LIVMF]-G-E-x-[GAS]-[LIVM]-x(3,7) Yes: VGEAAMPRI No: VGEAAYPRI 模式序列可能代表是一个酶的活性位点, 一个蛋白质家族的结构或者功能域的 氨基酸序列 。
2. Perl – Regular Expression [] 字符集中的任意一个 Eg. /[0123456789]/ 表示0-9是个数字中的任意一个 \d 0-9是个数字中的任意一个 Eg. /\d/ = /[0123456789]/ = /[0-9]/ \D 不是0-9是个数字中的任意一个 Eg. /\D/ = /[^0-9]/ \w 任何字母、数字和下划线中的任何一个 Eg. /\w/ = /[_0-9a-zA-Z]/ \W 不是字母、数字和下划线中的任何一个 Eg. /\W/ = /[^_0-9a-zA-Z]/ \s “空格”,“\r”,“\n”,“\t”,“\f”中的任何一个 Eg. /\s/ = /[ \r\t\n\f]/ \S 不是“空格”,“\r”,“\n”,“\t”,“\f”中的任何一个 Eg. /\S/ = /[^ \r\t\n\f]/
^ 在字符集中 ^ 表示补集,在一般的模式中表示以什么开头 Eg. /[^123]/ 表示“不是1或2或3”;/^123/ 表示以“123”开头 $ 表示以什么结尾 Eg. /123$/ 表示以“123”结尾 . 匹配任何一个字符 Eg. /a.c/ 表示匹配1个a,接任何一个字符,再接1个c; * 匹配0或更多次, Eg. /ab*c/ 表示匹配1个a,接0或更多个b,再接1个c; + 匹配1或更多次 Eg. /ab+c/ 表示匹配1个a,接1或更多个b,再接1个c; ? 匹配1或0次 Eg. /ab?c/ 表示匹配1个a,接0或1个b,再接1个c; {count}匹配count次 Eg. /ab{3}c/ 表示匹配1个a,接3个b,再接1个c; {min,} 匹配至少min次 Eg. /ab{3,}c/ 表示匹配1个a,接至少3个b,再接1个c; {min,max} 匹配至少 min次,但不超过max次 Eg. /ab{3,5}c/ 表示匹配1个a,接3到5个b,再接1个c;
2. Perl – Regular Expression 模式修饰词: i 忽略大小写 Eg. $s =~ /abc/i, 匹配“abc”,无论大小写 g 匹配所有可能的模式 Eg. $s =~ s/a/A/g, 把$s中所有“a”都替换成“A”; Eg. $s =~ s/a/A/, 把$s中匹配的第一个“a”替换成“A”; x 忽略模式中的换行 Eg. $s =~ /ab 和 $s =~ /abc/ 是一样的 c/x /[a-z]+.\d{2,4}\s+[^XY]\s2013$/ $seq1 = "asd-345 A 2013" $seq2 = "sd-sss ws2013"
2. Perl – Regular Expression 模式的匹配: 可以用()捕获特定的模式 并依次存入 $1 $2 $3 中 $output="robert 27 m\n 2013"; if ($output =~ m/([a-z]+)\s+(\d{1,3})\s+[mf]\s+2013$/) { print "name: $1\nage: $2"; }
2. Perl – File I/O #续写文件 “>>” #读入文件 open(FH, ">>test2.pdb"); print FH $get[1]; close FH; #覆盖写文件 “>” open(FH, ">test2.pdb"); #读入文件 open(FH,"test.pdb"); @get=<FH>; close FH; print $get[0]; #写入文件 open(FH, ">test2.pdb"); print FH $get[0];
2. Perl – File I/O #屏幕输入 print "What's your name?\n"; $name = <STDIN>; chomp($name); print "Hello $name!"; #$name由屏幕输入赋值 #去掉$name末尾的\n, 如果有
2. Perl – Web Connection #!/usr/bin/perl use LWP::Simple; $url='http://www.uniprot.org/uniprot/Q6GV17.fasta'; $content = get $url; die "Couldn't get $url" unless defined $content; print $content; ###### open (FH, ">seq.fasta"); @ids=("Q6GV17","Q9BXR5","B3Y669","C0LSK8"); foreach (@ids) { $url="http://www.uniprot.org/uniprot/$_.fasta"; print FH "$content"; } close FH;
2. Perl –Example #!/usr/bin/perl use LWP::Simple; print "Please enter the Uniprot ID:\n"; $id = <STDIN>; chomp $id; $url="http://www.uniprot.org/uniprot/$id.fasta"; $content = get $url; die "Couldn't get $url" unless defined $content; @get1 = split(/\n/,$content); shift @get1; $sequence = join("",@get1); print "Which amino acid?\n"; $aa = <STDIN>; chomp $aa; $count_aa=0; while ($sequence =~ m/$aa/ig) { $count_aa++;} $len = length($sequence); $aa_percent=$count_aa/$len; print "$aa in $id: $aa_percent";
3. HTML HTML语言(Hyper Text Markup Language,超文本标记语言):描述信息所有的规范标签,这些标签告诉浏览器怎样显示这个页面。 源文件 网页
3. HTML 标签的基本结构: <Tag> </Tag> Eg: <h1>Hello World!</h1> <br></br> 等同于 <br/> 标签之间可以嵌套(一对标签里包含另一对标签): <Tag1> <Tag2> </Tag2> </Tag1> <Tag1> <Tag2> </Tag1> </Tag2> 这样是不对的 Eg: <h1><i>Hello World!</i></h1> 标签的属性: <Tag attribute1=“” attribute2=“”> </Tag> Eg: <font color=“blue” size=“3”>Hello World!</font> <h1 align=“center”>Hello Word</h1> 注释标签: <!--Comments--> Eg: <!--这里是注释,注释可以分 很多行业-->
3. HTML HTML文档的结构: <HTML> <HEAD> <!--头部信息--> <title>My Site</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"/> </HEAD> <BODY> <!--文档主体,正文部分--> </BODY> </HTML>
3. HTML 常用的标签: 标题标签:六个等级,H后数越小,标题字号就越大。 <H1></H1>, <H2></H2>, … , <H6></H6> 段落及换行标签: 换行标签:<BR/> 段落标签:<p></p>, <p align=“center”></p> align=“center” or ”left” (默认) or ”right” 水平线标签:<HR/> size:水平线宽度 width:水平线的长 align:水平线对齐方式 color: 水平线颜色
3. HTML 常用的标签: 文字格式标签:<FONT></FONT> size:文字大小,1-7,缺省是3 face:文字字体,Eg:Arial,Verdana, … color: 文字颜色 文字效果标签: <b></b> 加粗 <i></i> 斜体 <u></u> 下划线 <tt></tt> 打印机字体 <blink></blink> 闪烁
3. HTML 常用的标签: 项目符号标签: <ul> <dl> <li>第一项</li> <dt>第一项</dt> <li>第二项</li> <dd>第一项是关于老鼠</dd> …… <dt>第二项</dt> <li>第n项</li> <dd>第二项是关于大象</dd> </ul> </dl> <ul></ul>以图形为项目符号,默认“圆点”。 <ol></ol>以数字为项目符号。 <dl></dl>可以给每一个列表项再加上一段说明性文字。
3. HTML 常用的标签: 表格标签: <table border=“1” width=“300” height=“300”> <th>姓名</th> <th>性别</th> <tr> <td>张三</td><td>女</td> </tr> <td>李四</td><td>男</td> </table> <table>定义了一个表格。<th>定义了标题格。<tr>定义一行。<td>定义了一行中的一列。<td>可以用align设定左右对齐(left, center, right),用valign设定上下对齐(top, middle, bottom)。
表格标签: <table border="1" width="300" height="300"> <th>姓名</th> <th>性别</th> <tr> <td align=“center”><b>张三</b></td> <td>女</td> </tr> <td align="center" colspan="2">李四</td> </table> <td align=“center” rowspan=“2”><b>张三</b></td> <td>男</td>
3. HTML 常用的标签: 超链接标签: 链接到外部地址:<a href="http://www.sdu.edu.cn">山东大学</a> 链接到内部地址:<a href=“index02.html”>本网站的另一个网页</a> 链接到上一级目录的网页:<a href=“../index03.html”>上一个</a> 链接到当前网页的某一个位置: <a name="top"/> <a href="#top">返回页首</a> 可利用target=“_blank”属性另网页在新的窗口中打开: <a href="http://www.sdu.edu.cn" target="_blank">山东大学</a> 若不加此项,则网页在当前窗口打开。
3. HTML 常用的标签: 表单标签: <html> <body> <FORM action="../cgi-bin/test.cgi" method="post" encType="multipart/form-data"> <input name="name" size="40"/> <input type="submit" name="submit" value="submit"/> </FORM> </body> </html> 源文件 test.html 文件 网页
3. HTML 常用的标签: 表单标签: #!/usr/bin/perl use CGI qw(:standard); $cgi = new CGI; $name = $cgi->param("name"); print $cgi->header( -type=> "text/html"); print "<p>Hallo $name!</p>"; 源文件 test.cgi 文件
3. HTML 常用的标签: 表单标签: name: <input name="name" size=“40"/> <input type="radio" name="sex" value="male" /> Male <br/> <input type="radio" name="sex" value="female" /> Female <input type="checkbox" name="fruit" value="apple">apple<br/> <input type="checkbox" name="fruit" value="mango">mango<br/> <textarea name="comment" rows="3" cols="20"> xxx </textarea> <input type="submit" name="submit" value="submit"/>
http://www.w3school.com.cn/tags/index.asp