Perl语言入门实战习题
Perl语言入门(第四版)习题答案
Perl语言入门(第四版)习题答案《Perl语言入门习题答案》2.12 练习1、写一个程序,计算半径为12.5的圆的周长。
圆周长等于2π(π约为3.1415926)乘以半径。
答案为78.5。
-----------------------/home/confish/perl/girth#!/usr/bin/perl -w#this program calculate a circle's girth#confish@ubuntu7.10$r=12.5;$g=12.5*2*3.1415;print "the girth of the circle is $g\n";-----------------------/home/confish/perl/girth2、修改上述程序,用户可以在程序运行时输入半径。
如果,用户输入12.5,则应得到和上题一样的结果。
-----------------------/home/confish/perl/girthpro #!/usr/bin/perl -w#a better one to calculate girth#confish@ubuntu7.10print"enter the radius of the circle\n";chomp($r=<STDIN>);if($r>0){print"the girth of the circle is".$r*2*3.1415."\n";}else{print"nonavailable!\n";}-----------------------/home/confish/perl/girthpro3、修改上述程序,当用户输入小于0 的数字时,程序输出的周长为0,而非负数。
-----------------------/home/confish/perl/girthzero #!/usr/bin/perl -w#calculate the girth and print 0 when the radius is lower than 0#confish@ubuntu7.10print"enter the radius of the line\n";chomp($r=<STDIN>);if($r>0){print"the girth of the circle is$r*2*3.1415\n";}else{print"the girth of the circle is 0\n";}-----------------------/home/confish/perl/girthzero1、2、3:(一起实现的)#!/usr/bin/perl -w$pai=3.141592654;print "Please Input Radius:";$r=<STDIN>;if ( $r lt 0 ){print "The circumference is 0\n";}else{$l=$r*2*$pai;printf "The circumference is %.1f\n",$l;}4、写一个程序,用户能输入2 个数字(不在同一行)。
Perl编程题-题目(1)
1.输出文件行数。
2.输出FASTA、FASTQ序列文件包含的序列条数。
3.将文件从最后一行一直输出到第一行。
4.FASTA序列反向互补。
5.FASTQ序列转FASTA序列。
6.输入文件:
输出要求:为文件中第一列(基因ID)添加描述信息。
6.根据基因ID将不同文件中该基因的某一统计信息整合输出到一个文件中。
输入文件:
11.将一个文件,按照任意给定的数字(行数),等分成几分,注意最后一份可能数据不足给出的行数。比如:一个文件10行,输入3,给出4个文件:1-3,4-6,7-9,10
输入文件:
12.求一个序列的GC含量,和N的比率。
输入文件:
输入文件:
输出要求:将两个文件中都有的基因输 Nhomakorabea,并输出其在不同文件中的log2值。
7.给出一个read,求其平均质量值。
输入文件:
8.给出两组序列,找出其中的公共序列(按名称处理)。perl
输入文件:
9.给出一条fa序列,提取其中的10-150这部分位点的序列出来(起始位点为1)。
输入文件:
10.统计fa格式的序列长度。
perl面试例题
Perl 第一阶段学习总结1 use strict 和use warnings 的作用?use strict 什么场合要用use strict?当你的程序有一定的行数时,尤其是在一页放不下时,或者是你找不到发生错误的原因时。
为什么要用 use strict?众多的原因之一是帮你寻找因为错误拼写造成的错误。
比如错误使用了'$recieve_date' 变量,但实际上你在程序中已声明的是 '$receive_date' 变量,这个错误就很难发现。
同样,use strict 迫使你把变量的范围缩到最小,使你不必担心同名变量在程序的其它部份发生不良作用。
(尽管这是 my 的功能,但是如果你使用 use strict 的话,它会强迫你用 my 声明变量,来达到上述目的)。
指定了use warnings;的话perl在编译的时候会将警告信息打印出来,否则不打印。
2 perl注释的方法?(1)‘#’用于注释单行(2) 注释一段=cut; #注释=cut 包围的代码………=cut;Or<<TXT; #注释<<TXT…TXT包围的代码………TXTOr__END__ #注释此行之后的所有代码………Or__DATA__ #可将__DATA__之后的代码作为程序的参数列表………3 单引号和双引号的区别?单引号不能内插且只能转义’\’,’’’两个字符。
双引号可以内插和转义所有字符。
4 print @array;print “@array”;print @array . “\n”有什么区别?Eg:my @array = qw/a b c/;Print @array; # abcPrint “@array” # a b c “内插时,会在数组各个元素之间自# 动添加分隔用的空格(小骆驼书原话)”Print @array . “\n” # 3 ‘.’是标量操作符,所以@array是#标量上下文。
PML基础练习
PML基础练习⼀个简单的 Macro (1)参数化宏Parameterized Macro (2)变量给属性赋值 (2)字符串⽅法实例 (2)定义函数 (2)练习-新建函数计算园的⾯积,测试函数 (3)条件判断语句(If Construct) (3)练习-条件判断 (3)循环赋值 (4)中断循环 Break (4)⽤skip 跳过奇数 (4)练习-跳转 (5)错误提⽰ (5)错误处理(Error Handling) (5)数组(Array) (6)赋值循环Do value (6)索引循环Do indices (6)管道排序 (6)练习-选择⼀个设备,将所有Nozzle连接的管道添加进来 (6)显⽰输出窗⼝.................................................................................错误!未定义书签。
⼀个简单的对话框(Form) (7)缺省构造⽅法(Constructor method) (7)控件定位 (7)控件定义 (8)设置控件初始值 (8)按钮的应⽤实例 (9)对话框控制属性-Apply (9)多选框的应⽤实例 (10)列表框应⽤实例 (11)Alpha Views (12)V olumn View (13)⽂件处理(Handling Files) (13)练习-⽂件处理 (13)选择⽂件 (13)⼀个简单的 MacroNEW EQUIP /FREDNEW BOXXLEN 300 YLEN 400 ZLEN 600NEW CYL DIA 400 HEI 600CONN P1 TO P2 OF PREV参数化宏Parameterized MacroNEW EQUIP /$1NEW BOXXLEN $2 YLEN $3 ZLEN $4NEW CYL DIA $3 HEI $4CONN P1 TO P2 OF PREV变量给属性赋值New PipeDesc 'My Description'Temp 100Pspec /A3BPurp PIPI!desc = desc!temp = temp!pspec = pspec!purp = purpNew PipeDesc '$!desc'Temp $!temppspec $!pspecpurp $!purp字符串⽅法实例!str = 'hello how are you!'!newstr = !str.after('hello').trim().replace('how', 'where').replace('!', '?') q var !newstr定义函数define function !!Area( !Length is REAL, !Width is REAL ) is REAL !Area = !Length * !Widthreturn !Area $*函数!!Area有两个参数⼀个返回值Endfunction练习-新建函数计算圆的⾯积,测试函数define function !!circleArea( !radius is REAL) is REAL !Area = PI * !Radius.Power(2) return !AreaEndfunction条件判断语句(If Construct)!Type = Type!OwnType = Type of OwnerIF (!Type eq 'BRAN') THEN$P CE is Branch.ELSEIF (!OwnType eq 'BRAN') THEN$P CE is Branch member.ELSE$P CE is $!Type,Pls select Branch.ENDIF练习-条件判断!type = typeadd ceif(!type eq 'BRAN') thenadd hrefadd trefelseif(!type eq 'NOZZ') thenadd crefendif$p Current type = $!type进⼀步判断:打印加⼊的元素个数!n = 0!type = typeadd ceif(!type eq 'BRAN') then!href = href!tref = trefif(!href.set()) then!n = !n + 1add hrefendifif(!tref.set()) then!n = !n + 1add trefendifelseif(!type eq 'NOZZ') then!cref = crefif(!cref.set()) then!n = !n + 1add crefendifendif$p Current type = $!type$p Total $!n reference循环赋值!Total = 0Do !x From 1 To 100 By 1!Total = !Total + !xEnddo中断循环 Break!Total = 0Do !x From 1 To 100!Total = !Total + !xIf(!Total gt 500) thenBreak $*或者Break if(!Total gt 500)EndifEnddo⽤skip 跳过奇数Do !x From 1 To 100If(Int(!x / 2) NE (!x / 2)) thenSkip $*或者Skip If(Int(!x / 2) NE (!x / 2)) Endif !Total = !Total + !xEnddo练习-跳转!n = 0label /start!type = typeif(!type eq 'BRAN') then !href = href!tref = trefif(!href.set()) then!n = !n + 1add hrefendifif(!tref.set()) then!n = !n + 1add trefendifendifif(!type eq 'NOZZ') then !cref = crefif(!cref.set()) then!n = !n + 1add crefgoto crefgolabel /startendifendif$p Total $!n reference错误提⽰Next$p OK错误处理(Error Handling) NextHandle any EndHandle$p OK数组(Array)!Str = 'Benz,Bmw,Audi' !BestCar = !Str.Split(',') Q var ! BestCar!BestCar[5] = 'Cadillac'!BestCar.Append('Lincoln')赋值循环Do valuedo !Name values !BestCar$p Array element is $!NameEnddo索引循环Do indicesdo !n indices !BestCar!Car = !BestCar[!n]$p Array element $!n is $!CarEnddo管道排序Var !Pipes Coll all Pipe for ce!pipename = array()Do !pipe value !pipes$!pipe!name = name!pipename.append(!name)EnddoVar !Names Eval name for all from !Pipes!Names.sort().invert()Do !n indices !Namesreorder $!names[$!n] before $!nEndDo练习-选择⼀个设备,将所有Nozzle连接的管道添加进来Add ceAuto ceVar !nozzles Coll all nozzle for ceVar !Crefs eval cref for all from !nozzlesDo !Cref value !CrefsAdd $!crefEndDo⼀个简单的对话框(Form)setup form !!helloTitle 'Hello'Paragraph .Message text 'Hello world'button .bye 'Goodbye' OKexit缺省构造⽅法(Constructor method)setup form !!helloTitle 'Hello'paragraph .Message text 'Hello world'text .input 'Enter text' width 10 is string $*字符串类型的编辑框button .bye 'Goodbye' OKexitDefine method .hello() $*缺省构造⽅法,与Form同名,不带参数!this.input.callback = ‘!this.doinput()’ $*Callback指明响应操作endmethodDefine method .doinput() $*响应操作!this.message.val = !this.input.val $*!this = !!hello, val 表⽰value endmethod 控件定位setup form !!helloTitle 'Hello'paragraph .Message text 'Hello world'text .input 'Enter text' at x0 ymax width 10 is stringbutton .bye 'Goodbye' at x0 ymax OKexit控件定义setup form !!addvolumntitle 'Add volumn'button .ce 'CE' at x0 ymax tooltip 'Select pipe'paragraph .cename text 'no name' width 15text .input 'Enter text' at x0 ymax width 10 is stringFrame .frame1 'Include' at x0 ymaxtoggle .bran 'Branch'toggle .equi 'Equipment'Exitlist .list 'Drawlist' at x0 ymax+0.3 width 18 height 5button .ok 'OK' at x0 ymax OKpath rightbutton .apply 'Apply' applybutton .cancel 'Cancel' Cancel!modifyOnIcon = !!pml.getpathname('modmodeon16.png') button .pick pixmap /$!modifyonicon at x0 ymax exit设置控件初始值setup form !!addvolumntitle 'Add volumn'button .ce 'CE' at x0 ymax tooltip 'Select pipe'paragraph .cename text 'no name' width 15text .input 'Enter text' at x0 ymax width 10 is stringFrame .frame1 'Include' at x0 ymaxtoggle .bran 'Branch'toggle .equi 'Equipment'Exitlist .list 'Drawlist' at x0 ymax+0.3 width 18 height 5button .ok 'OK' at x0 ymax OKpath rightbutton .apply 'Apply' applybutton .cancel 'Cancel' Cancel!modifyOnIcon = !!pml.getpathname('modmodeon16.png') button .pick pixmap /$!modifyonicon at x0 ymax exitdefine method .addvolumn()!this.bran.val = true!this.input.val = '1500'endmethod按钮的应⽤实例setup form !!addvolumntitle 'Add volumn'button .ce 'CE' at x0 ymax tooltip 'Select pipe'paragraph .cename text 'no name' width 15text .input 'Enter text' at x0 ymax width 10 is stringFrame .frame1 'Include' at x0 ymaxtoggle .bran 'Branch'toggle .equi 'Equipment'Exitlist .list 'Drawlist' at x0 ymax+0.3 width 18 height 5button .ok 'OK' at x0 ymax OKpath rightbutton .apply 'Apply' applybutton .cancel 'Cancel' Cancel!modifyOnIcon = !!pml.getpathname('modmodeon16.png') button .pick pixmap /$!modifyonicon at x0 ymax exitdefine method .addvolumn()!this.bran.val = true!this.input.val = '1500'!this.ce.callback = '!this.ce()'endmethoddefine method .ce()!this.cename.val = fullnameendmethod对话框控制属性-Applysetup form !!addvolumntitle 'Add volumn'button .ce 'CE' at x0 ymax tooltip 'Select pipe'paragraph .cename text 'no name' width 15text .input 'Enter text' at x0 ymax width 10 is stringFrame .frame1 'Include' at x0 ymaxtoggle .bran 'Branch'toggle .equi 'Equipment'Exitlist .list 'Drawlist' at x0 ymax+0.3 width 18 height 5button .ok 'OK' at x0 ymax OKpath rightbutton .apply 'Apply' applybutton .cancel 'Cancel' Cancel!modifyOnIcon = !!pml.getpathname('modmodeon16.png') button .pick pixmap /$!modifyonicon at x0 ymax exitdefine method .addvolumn()!this.bran.val = true!this.input.val = '1500'!this.ce.callback = '!this.ce()'!this.apply.callback = '!this.apply()' $*不关闭对话框endmethoddefine method .ce()!this.cename.val = fullnameendmethoddefine method .apply()!dist = !this.input.val!name = !this.cename.val$p CE is $!name ,Dist = $!distendmethod多选框的应⽤实例setup form !!addvolumntitle 'Add volumn'button .ce 'CE' at x0 ymax tooltip 'Select pipe'paragraph .cename text 'no name' width 15text .input 'Enter text' at x0 ymax width 10 is stringFrame .frame1 'Include' at x0 ymaxtoggle .bran 'Branch'toggle .equi 'Equipment'Exitlist .list 'Drawlist' at x0 ymax+0.3 width 18 height 5button .ok 'OK' at x0 ymax OKpath rightbutton .apply 'Apply' applybutton .cancel 'Cancel' Cancel!modifyOnIcon = !!pml.getpathname('modmodeon16.png') button .pick pixmap /$!modifyonicon at x0 ymax exitdefine method .addvolumn()!this.bran.val = true!this.input.val = '1500'!this.ce.callback = '!this.ce()'!this.apply.callback = '!this.apply()' $*不关闭对话框endmethoddefine method .ce()!this.cename.val = fullnameendmethoddefine method .apply()!name = !this.cename.val!dist = !this.input.val!elements = array()if(!this.bran.val) thenvar !elements append coll all bran Within Volume $!name $!dist endifif(!this.equi.val) thenvar !elements append coll all equip Within Volume $!name $!dist endifvar !names eval name for all from !elementsdo !element value !elementsadd $!elementenddoendmethod列表框应⽤实例setup form !!addvolumntitle 'Add volumn'button .ce 'CE' at x0 ymax tooltip 'Select pipe'paragraph .cename text 'no name' width 15text .input 'Enter text' at x0 ymax width 10 is stringFrame .frame1 'Include' at x0 ymaxtoggle .bran 'Branch'toggle .equi 'Equipment'Exitlist .list 'Drawlist' at x0 ymax+0.3 width 18 height 5button .ok 'OK' at x0 ymax OKpath rightbutton .apply 'Apply' applybutton .cancel 'Cancel' Cancel!modifyOnIcon = !!pml.getpathname('modmodeon16.png') button .pick pixmap /$!modifyonicon at x0 ymax exitdefine method .addvolumn()!this.bran.val = true!this.input.val = '1500'!this.ce.callback = '!this.ce()'!this.apply.callback = '!this.apply()' $*不关闭对话框!this.list.callback = '!this.doselection()'endmethoddefine method .ce()!this.cename.val = fullnameendmethoddefine method .apply()!name = !this.cename.val!dist = !this.input.val!elements = array()if(!this.bran.val) thenvar !elements append coll all bran Within Volume $!name $!dist endif if(!this.equi.val) thenvar !elements append coll all equip Within Volume $!name $!dist endif var !names eval name for all from !elements!this.list.dtext = !namesdo !element value !elementsadd $!elementenddoendmethoddefine method .doselection()!name = !this.list.selection()$!nameendmethodAlpha ViewsSetup Form !!alphaviewtitle ' Input & Output'view .Input ALPHA hei 10 width 40channel REQUESTSchannel COMMANDSExitbutton .apply 'Apply' at x0 ymax Applybutton .Dismiss 'Cancel' at Xmax form-size CancelExitVolumn Viewsetup form !!poptestview .vol volume width 50 hei 9exitpath downbutton .press 'swap popup' call '!this.popswap()'menu .popmenuadd 'hello' ' 'add 'world' ' 'exitexitdefine method .popswap()!this.vol.popup = !this.popmenuendmethod⽂件处理(Handling Files)!Input = object FILE('%pdmsexe%abc.txt')!Lines = !Input.ReadFile() $* ReadFile将⽂件内容写到字符串数组中!ResultArray = ARRAY() $* 声明新数组do !Line VALUES !Lines!Column1 = !Line.Part(1)!ResultArray.Append( !Column1)Enddo!Output = object FILE('%pdmsexe%def.txt')!Output.WriteFile('WRITE', !ResultArray) $* WriteFile将数组写到⽂件练习-⽂件处理!Input = object FILE('%pdmsexe%abc.txt')!Lines = !Input.ReadFile()do !Line VALUES !Lines$p $!lineEnddo选择⽂件setup form !!findfiletitle 'Find file'text .filename 'File name' at x1 ymax+0.3 width 35 is stringbutton .browser 'Brower'button .ok ' OK ' at x1 ymax+0.3 OKbutton .cancel 'Cancel' at x10 cancelexitdefine method .findfile()!this.browser.callback = |!!filebrowser('%pdmsuser%','*','',true,'!!findfile.filename.val = !!()')|endmethodSYSCOM 'notepad.exe &'后⾯加个&时单独启⽤进程调⽤应⽤程序,PDMS就不会处于停滞模态。
pink练习题
pink练习题一、基础知识类1. 请列举出五种常见的编程语言及其主要用途。
2. 简述面向对象编程中的三大特性。
3. 请解释什么是数据结构,并列举出三种常见的数据结构。
4. 描述操作系统的五大功能。
5. 请说明计算机网络中的OSI七层模型。
6. 简述数据库的基本概念,包括数据库、数据库管理系统和SQL语言。
7. 请解释什么是算法,并列举出三种常见的排序算法。
8. 描述软件工程的五大过程模型。
9. 请说明计算机硬件系统的主要组成部分。
10. 简述计算机软件的分类。
二、编程实践类1. 编写一个Python程序,实现输入一个整数,输出它的阶乘。
2. 编写一个C++程序,实现输入一个字符串,输出它的反转形式。
3. 编写一个Java程序,实现一个简单的计算器功能,包括加、减、乘、除。
4. 编写一个JavaScript程序,实现一个简单的网页时钟。
5. 编写一个HTML和CSS代码,实现一个简单的网页布局。
6. 编写一个SQL查询语句,查询学生表中年龄大于18岁的学生信息。
7. 编写一个PHP程序,实现用户登录功能。
8. 编写一个React组件,实现一个待办事项列表。
9. 编写一个Node.js程序,实现一个简单的HTTP服务器。
10. 编写一个TypeScript程序,实现一个简单的类和对象。
三、算法与数据结构类1. 请用伪代码描述冒泡排序算法的实现过程。
2. 请用Python实现快速排序算法。
3. 请用C++实现链表的基本操作,包括插入、删除和查找。
4. 请用Java实现二叉树的前序遍历、中序遍历和后序遍历。
5. 请用JavaScript实现堆排序算法。
6. 请用PHP实现图的邻接矩阵表示和深度优先搜索。
7. 请用C实现哈希表的基本操作,包括插入、删除和查找。
8. 请用Go实现红黑树的插入操作。
9. 请用Rust实现跳表的数据结构。
10. 请用Swift实现并查集的数据结构。
四、操作系统与计算机网络类1. 请解释进程和线程的区别。
P、V原语操作的几道习题
begin repeat
P(sb);
P(mutex); 将B产品入库; V(mutex); V(sa);
until false
end
until false
end
习题六
今有三个并发进程R,M,P,它们共享了一个 可循环使用的缓冲区B,缓冲区B共有N个单元。 进程R负责从输入设备读信息,每读一个字符后, 把它存放在缓冲区B的一个单元中;进程M负责 处理读入的字符,若发现读入的字符中有空格符 ,则把它改成“,”;进程P负责把处理后的字符 取出并打印输出。当缓冲区单元中的字符被进程 P取出后,则又可用来存放下一次读入的字符。 请用PV操作为同步机制写出它们能正确并发执 行的程序。 0 1 2 3 4 5 6 … … N-1
mf[0:N] = 0;
表示每个缓冲区是否为满的标志: ff[0:N ]=0;
表示每个缓冲区中的数据:B[0:N ]
PP: PR: PM: Begin Begin Begin P(full) 读一个字符ch; P(SM); P(mutex) P(mutex); P(avail) 找到一个 buffer j,它 找到一个buffer k ,它 P(mutex) (ff[k] true & 取出一个空的缓 (ff[j] true & mf[k] true;) 冲区i; mf[j] false;) Print B[k]; ff[i] true Modifiy B[j]; ff[k] false B[i]ch; mf[j] true mf[k] false; mf[i] false; V(mutex) V(mutex) V(mutex); V(full); V(avail); V(SM); End; End; End;
Perl练习题
2.12 练习写一个程序,计算半径为12.5的圆的周长。
圆周长等于2π(π约为3.1415926)乘以半径。
答案为78.5。
#!/usr/bin/perl$r=12.5;$pai=3.1415926 ;$C=2*$pai*$r;Print “$C\n”;修改上述程序,用户可以在程序运行时输入半径。
如果,用户输入12.5,则应得到和上题一样的结果。
#!/usr/bin/perl$r=<STDIN>;$pai=3.1415926 ;$C=2*$pai*$r;Print “$C\n”;修改上述程序,当用户输入小于0 的数字时,程序输出的周长为0,而非负数。
#!/usr/bin/perl$r=<STDIN>;$pai=3.1415926 ;if($r>=0){$C=2*$pai*$r;}If($r<0){$C=0;}Print “$C\n”;写一个程序,用户能输入2 个数字(不在同一行)。
输出为这两个数的积。
#!/usr/bim/perl$a=<STDIN>;$b=<STDIN>;$c=$a*$b;Print”$c”;写一个程序,用户能输入1 个字符串和一个数字(n)(不在同一行)。
输出为,n 行这个字符串,1 次1 行(提示,使用“x”操作符)。
例如,如果用户输入的是“fred”和“3”,则输出为:3 行,每一行均为fred。
如果输入为“fred”和“299792”,则输出为299792 行,每一行均为fred。
#!/usr.bin/perl$string=<STDIN>;$int=<STDIN>;$output=$string x $intprint $output;3.9练习写一个程序,将一些字符串(不同的行)读入一个列表中,逆向输出它。
如果是从键盘输入的,那在Unix 系统中应当使用CTRL+D 表明end-of-file,在Windows 系统中使用CTRL+Z.写一个程序,读入一串数字(一个数字一行),将和这些数字对应的人名(下面列出的)输出来。
perl 正则表达式例题
perl 正则表达式例题当然可以!以下是一些使用 Perl 正则表达式的例题:1. 匹配数字:```perl$string = "我有100个苹果和20个香蕉";if ($string =~ /(\d+)/) {print "匹配到的数字是: $1\n";}```输出:```匹配到的数字是: 100```2. 匹配邮箱地址:```perl$email = "";if ($email =~ /([a-zA-Z0-9_-]+[a-zA-Z0-9_-]+\.[a-zA-Z]{2,})/) { print "匹配到的邮箱地址是: $1\n";}```输出:```匹配到的邮箱地址是:```3. 匹配日期格式:YYYY-MM-DD```perl$date = "今天是";if ($date =~ /(\d{4})-(\d{2})-(\d{2})/) {print "匹配到的年份是: $1, 月份是: $2, 日期是: $3\n";}输出:```yaml匹配到的年份是: 2023, 月份是: 07, 日期是: 19```4. 替换字符串中的内容:```perl$text = "我喜欢吃苹果和香蕉";$new_text = $text =~ s/苹果/桃子/;print $new_text; 输出: 我喜欢吃桃子和香蕉```这些例题可以帮助你理解 Perl 正则表达式的使用方法和功能。
当然,Perl 正则表达式还有更多高级的用法和技巧,你可以查阅相关资料或参考 Perl 的官方文档来深入学习。
perl 复习题 (答案)
PERL复习题(答案不是标准答案,仅供参考)一、选择题1. What is the simplest type of data that Perl can work with?A elementB scalarC vectorD component2. Which operator can be used to take the bottom item from an array?A popB pushC pullD plant3. Which operator is used to arrange items in character order?A ascendB sortC arrangeD descend4. Rather than using print, what is often used in Perl when formatting is important?A printfB formatC alignD show5. Which modifier can be used when matching in Perl to ignore case?A sB vC iD c6. Which operator can be used to break up a string into more than one part based upon a separator?A chopB splitC divideD parse7. What option do you use when starting Perl to tell it to run in warning mode? _-w \ use warnings (Fill in the blank.)8. Which control structure can be used to execute only a condition is false?A untilB unlessC whileD without9. Which of the following commands should be used to open a filehandle named KAREN to an existing file named sw?A open KAREN “>sw”;B open KAREN, “>sw”;C open “sw” KAREN;D open “>sw”, KAREN;10. Within Perl, which operator is used to change the working directory?A cdB chdirC pwdD wd11. Which operator can be used to access the first item in an array?A shiftB startC right$D left$12. Within a loop, which operator immediately ends execution of the loop?A nextB lastC redoD leave13. Which function can be used to make sure your program exits with a nonzero status even if there a standard error?A hashB noexitC nozeroD die14. Which of the following operators work most like simple searching/pattern matching?A /fB /gC s///D m//15. Which keyword is used in Perl to define a subroutine?A branchB subC splitD make16. You want to close the directory handle EV AN. Which of the following should you use to accomplish this?A close EV AN;B closedir EV AN;C close_directory EV AN;D none of the above17. Which of the following lines of code accomplishes the same thing as $price = $price + 9;?A $price +9;B $price =+9;C $price +=9;D 9 + $price18. What value do variables have before they are first assigned?A undefB nullC 0D nil19. Which Perl function can be used to launch a child process to run a program?A splitB spinC forkD system20. Which Perl function can be used to identify the first found occurrence of a substring?A findB indexC locateD allocate21. Which control structure can be used to loop as long as a conditional expression returns true?A untilB unlessC whileD without22. Which operator can be used to create private variables within a subroutine?A nativeB limitedC myD regional23. Which of the following operators is used to return a value in a subroutine?A returnB sendC giveD show24. Your script has just read in a variable from the keyboard and you want to strip that variable of the newline character that came in. What operator should you use to perform this operation?A tidyB trimC chompD slim25. What is the default sort order in Perl?A alphabeticB numericC ASCIID none of the above26. Within a loop, which operator jumps to the end of the loop but does not exit the loop?A nextB lastC redoD leave27. (不确定)Which of the following should be used to print values in an array that do not contain newlines and add them to the end of each entry?A print @array;B print @array\n;C print “@array\n”;D print “$@array \\”;28. Which string comparison operator would be equivalent to the numeric > operator?A neB eqC geD gt29. Which function can be thought of as the opposite of split?A linkB joinC uniteD bond30. Which operator can be used to add an item to the bottom of an array?A popB pushC pullD plant31. Which of the following mathematical operations has the highest precedence in Perl?A **B ++C +D -32. 以下哪一个字符串直接量的定义方式是错误的()(1)'thank you'(2)" "(3)"a "friend" of yours"(4)"a \"friend\" of yours"33. 以下哪一条语句是错误的()(1)$_= 'hello world';(2)$a='hello world';(3)my $b,$a='hello world';(4)my ($a,$b)=(0,'hello world');34. 要使下面的程序正常运行,while后的表达式应选()。
Python初学者15道必练题及参考答案
Python初学者15道必练题
典型、快捷、有效的练习题
可新科技 | Python培训 | 2021
1: 已知两个整数,编写一段函数,返回它们的乘积,如果结果大于1000,则返回两个数的和。
已知:
2 已知0到9共十个数,编写一个从0开始到9结束的循环,在每一步打印当前数与上一个数的和。
预期返回结果:
5: 已知一个数列,如果数列的首尾数字相同,则返回真。
预期返回结果
6: 已知一个数列,编写一个循环,只打印可以被五整除的数。
预期输出结果:
7: 编写一段函数,返回“Emma”这个单词在一个句子中的出现次数。
输入的句子是“Emma is good developer. Emma is a writer”
期望输出结果为:
参考答案2: 不使用任何字符串函数
8: 编写函数,打印如下的数字组合。
9: 前后颠倒一个已知数,如果其结果与原来的数相同,则返回“此数为回文数”,否则返回“不是回文数”。
期望输出结果:
10: 输入两个数列,编写一个函数,将其合成一个数列,条件是:新数列只收录第一数列里的奇数,及第二个数列里的偶数,返回新的数列。
期望输出的结果:
11: 编写一段代码,从一个整数中间反序提取每一个数字。
期望输出结果:
比如, 如果一个整数是7536, 输出结果应该是“6 3 5 7“,数字之间用空格分开。
参考答案:
12: 已知输入的薪水,根据如下的阶梯所得税规定,计算个人所得税。
13: 打印1到10的乘法口诀表期望输出结果:
参考答案:
14: 打印由“*“字符组成的半个倒金字塔图案。
参考答案:。
Perl语言入门实战习题[试题]
Perl语言入门实战习题[试题] 《Perl语言入门实战习题》一、计算FASTA文件中每条序列的长度; 输入文件,FASTA格式:注:如果输入文件在windows下产生,在Linux系统下操作时,宜先用dos2unix处理:用法:dos2unix 输入文件输出文件:Perl代码:#!/usr/bin/perl -wuse strict;unless (@ARGV==2) { # @ARGV 传给脚本的命令行参数列表die"Usage: perl $0 <input.fa> <out.len>\n"; # 当命令行参数不是2的时候输出使用说明 }my ($infile,$outfile) = @ARGV; # 把命令行参数赋值给输入文件和输出文件 open IN,$infile || die"error: can't open infile: $infile"; # 打开输入文件句柄IN open OUT,">$outfile" || die$!; # 打开输出文件句柄OUT $/=">";<IN>; # 设置输入记录分隔符为”>”,并去除第一个”>”while ( my $seq = <IN>){ # 把序列ID行和序列赋值给$seqmy $id = $1 if($seq =~ /^(\S+)/); # 获取序列IDchomp $seq; # 去掉末尾的”>”$seq =~ s/^.+?\n//; # 删除第一行$seq =~ s/\s//g; # 删除序列中的空白字符my $len = length($seq); # 计算序列长度print OUT "$id\t$len\n"; # 输出结果到输出文件}$/="\n"; # 把输入记录分隔符改为默认值close IN; # 关闭输入文件句柄close OUT; # 关闭输出文件句柄二、计算FASTA文件中每条序列的GC含量; 输入文件同上,输出文件:Perl代码:#!/usr/bin/perl -wuse strict;unless (@ARGV==2) {# @ARGV 传给脚本的命令行参数列表die"Usage: perl $0 <input.fa> <out.gc>\n";# 当命令行参数不是2的时候输出使用说明}my ($infile,$outfile) = @ARGV;# 把命令行参数赋值给输入文件和输出文件open IN,$infile || die"error: can't open infile: $infile";# 打开输入文件句柄IN open OUT,">$outfile" || die$!;# 打开输出文件句柄OUT$/=">";<IN>;# 设置输入记录分隔符为”>”,并去除第一个”>” while(<IN>){# $_=<IN>,把序列ID行和序列赋值给$_,$_= 可以省略不写my $id = $1 if(/^(\S+)/);# 获取序列IDchomp; # 去掉末尾的”>”s/^.+?\n//;# 删除第一行s/\s//g; # 删除序列中的空白字符my $GC = (tr/GC/GC/);#计算G或C碱基个数my $AT = (tr/AT/AT/);#计算A或T碱基个数my $len = $GC + $AT;# 计算序列非N长度my $gc_cont = $len ? $GC / $len : 0; #计算GC含量,如果长度为0,GC含量算0print OUT "$id\t$gc_cont\n"; # 输出结果到输出文件 }$/="\n";# 把输入记录分隔符改为默认值close IN; # 关闭输入文件句柄close OUT;# 关闭输出文件句柄三、求反相互补序列;输入文件同上,输出文件也是FASTA格式 Perl代码:#!/usr/bin/perl -wuse strict;unless (@ARGV==2) {# @ARGV 传给脚本的命令行参数列表die"Usage: perl $0 <input.fa> <out.gc>\n";# 当命令行参数不是2的时候输出使用说明}my ($infile,$outfile) = @ARGV;# 把命令行参数赋值给输入文件和输出文件open IN,$infile || die"error: can't open infile: $infile";# 打开输入文件句柄IN open OUT,">$outfile" || die$!;# 打开输出文件句柄OUT $/=">";<IN>;# 设置输入记录分隔符为”>”,并去除第一个”>” while (<IN>){# $_=<IN>,把序列ID行和序列赋值给$_,$_= 可以省略不写my $id = $1 if(/^(\S+)/);# 获取序列IDchomp; # 去掉末尾的”>”s/^.+?\n//;# 删除第一行s/\s//g; # 删除序列中的空白字符$_ = reverse $_; # 序列方向tr/ATCG/TAGC/; # 序列互补print OUT ">$id\n",$_,"\n"; # 输出结果到输出文件}$/="\n";# 把输入记录分隔符改为默认值close IN; # 关闭输入文件句柄close OUT;# 关闭输出文件句柄四、列表信息整合;输入列表1:序列长度文件输入文件2:序列测序覆盖深度文件输出文件:把上述两个列表的信息整合成一个列表,并且最后一行给出汇总结果:Perl代码#!/usr/bin/perl -wuse strict;(@ARGV==3) || die"Usage: perl $0 <list1> <list2> <combine.list>\n"; # 当命令行参数不是3的时候输出使用说明my ($infile1,$infile2,$outfile) = @ARGV;# 把命令行参数赋值给输入文件1、输入文件2和输出文件 my %id_len; # 定义一个哈希open IN1,$infile1 || die$!; # 打开第一个文件句柄while(<IN1>){my ($id,$len) = split /\s+/,$_; # split函数用空白符号切割每一行的内容$id_len{$id} = $len; # 哈希赋值:id => length}close IN1; # 关闭第一个文件句柄open IN2,$infile2 || die$!; # 打开第2个文件句柄open OUT,">$outfile" || die$!; # 打开输出文件句柄my $tol_len = 0; # 定义总长度变量,并赋值为0my $tol_depth = 0; # 定义总深度变量,并赋值为0while (<IN2>){my ($id,$depth) = split; # split函数用空白符号切割每一行的内容my $len = $id_len{$id}; # 序列长度print OUT join("\t",$id,$len,$depth),"\n"; # 输出整合信息到输出文件$tol_len += $len; # 长度累加$tol_depth += $len * $depth; # 深度累加}$tol_depth /= $tol_len; # 计算总体平均深度print OUT "Total\t$tol_len\t$tol_depth\n"; # 输出汇总结果到输出文件close IN2; # 关闭第二个输入文件句柄close OUT; # 关闭输出文件句柄五、串流程;Perl在工作中常用于串流程,现有同事写了3个perl脚本分三步将输入文件,infile.txt处理成最终的final.result:第1步:perl step1.pl infile.txt output1 第2步:perl step2.pl infile.txt output2 第3步:perl step3.pl output1 output2 final.result为提高工作效率,现需要写一个脚本使用infile.txt 作为输入文件,直接得到final.result,中间产生的文件结果不保留。
Perl语言入门(第四版)习题标准答案
Perl语言入门(第四版)习题答案————————————————————————————————作者:————————————————————————————————日期:《Perl语言入门习题答案》2.12 练习1、写一个程序,计算半径为12.5的圆的周长。
圆周长等于2π(π约为3.1415926)乘以半径。
答案为78.5。
-----------------------/home/confish/perl/girth#!/usr/bin/perl -w#this program calculate a circle's girth#confish@ubuntu7.10$r=12.5;$g=12.5*2*3.1415;print "the girth of the circle is $g\n";-----------------------/home/confish/perl/girth2、修改上述程序,用户可以在程序运行时输入半径。
如果,用户输入12.5,则应得到和上题一样的结果。
-----------------------/home/confish/perl/girthpro#!/usr/bin/perl -w#a better one to calculate girth#confish@ubuntu7.10print"enter the radius of the circle\n";chomp($r=<STDIN>);if($r>0){print"the girth of the circle is ".$r*2*3.1415."\n";}else{print"nonavailable!\n";}-----------------------/home/confish/perl/girthpro3、修改上述程序,当用户输入小于0 的数字时,程序输出的周长为0,而非负数。
Perl语言学习练习及参考答案
#题2:#使用for循环打印出如下的字符。
# 1# 12# 123# 12345#*******************#Fw_Print_Step ($step++,"使用for循环打印出如下的字符。
11212312345");my $str= "";for (1..4) {$str= $str.$_;if ($_==4) {$str= $str.$_+1;}print " $str\n";}#*******************##题3:my $str1 = "abc";my $str2 = "efg";#将上述2个字符串连接起来,并输出合并后的字符串长度#*******************#Fw_Print_Step ($step++,"将上述2个字符串\"$str1\"和\"$str2\"连接起来,并输出合并后的字符串长度");my $str =$str1.$str2;my $str_length=length($str);print "新字串$str的长度为:$str_length";#*******************##题4:#以逆序方式打印出字符串包含的各个字符,如变量为"123456789"则输出为"9","8",..."2","1". my $str1="abc123def456";#*******************#Fw_Print_Step ($step++,"以逆序方式打印出字符串包含的各个字符,如变量为\"123456789\"则输出为\"9\",\"8\",...\"2\",\"1\".");my $str=$str1;print "以逆序方式打印出字符串\"$str1\"包含的各个字符:\n";for($length=length($str1); $length>0; $length--) {$sub_str=chop($str);if ($length>1) {print "\"$sub_str\",";} else {print "\"$sub_str\".";}}#*******************##题5:#分别使用for与while循环来计算1+2+3+...+100的值#*******************#Fw_Print_Step ($step++,"分别使用for与while循环来计算1+2+3+...+100的值"); print "用for循环计算1+2+3+...+100的值:\n ";my $result=0;for (1..100) {$result=$result+$_;}print "1+2+3+...+100=$result";print "\n用while循环计算1+2+3+...+100的值:\n ";my $result=0;my $num=1;while ($num<=100) {$result=$result+$num;$num++;}print "1+2+3+...+100=$result";#*******************##题6:#以逆序的方式打印出端口列表包含的成员口my @cmdArray = ("config", "int fa 0/1", "no shutdonw", "end");#*******************#Fw_Print_Step ($step++,"以逆序的方式打印出端口列表包含的成员口");for (my $start=$#cmdArray; $start>=0; $start--) {my $array=$cmdArray[$start];print "$array\n";}#*******************##题7:#使用foreach打印出Hash表的所有下标与值my %map = ('red', 0xff0000,'green', 0x00ff00,'blue',0x0000ff);#*******************#Fw_Print_Step ($step++,"使用foreach打印出Hash表的所有下标与值");foreach $capword (sort keys(%map)) {print ("$capword: $map{$capword}\n");}#while( ($key, $value) = Each (%Map)) {# Print "\N$key=$value;"}#*******************##题8:#使用正则匹配判断字符串是否包含error,若是打印提示信息。
Perl面试题
Perl语言面试题1.问题:什么是Perl?答案:Perl是一种解释型、功能丰富的编程语言,它具有动态的特性,能够处理文本和数据,非常适合用于文本处理、系统管理、网络编程、数据库操作等任务。
2.问题:Perl的基本语法是什么?答案:Perl的基本语法包括变量声明、控制结构(如if、while等)、循环结构(如for、foreach等)、函数定义和调用等。
3.问题:在Perl中如何声明变量?答案:在Perl中,可以使用$符号来声明变量,例如$var = 10;。
4.问题:在Perl中如何进行字符串操作?答案:Perl提供了丰富的字符串操作函数,如substr、index、length、tr 等,可以进行字符串的切割、查找、替换等操作。
5.问题:在Perl中如何进行数组操作?答案:Perl支持数组操作,可以使用@符号来声明数组,并使用push、pop、shift、unshift等函数进行数组的添加、删除、移除等操作。
6.问题:在Perl中如何进行文件操作?答案:Perl提供了丰富的文件操作函数,如open、readline、readlines 等,可以进行文件的打开、读取、写入等操作。
7.问题:在Perl中如何进行正则表达式匹配?答案:Perl支持正则表达式匹配,可以使用正则表达式函数如qr()和m()来进行模式匹配和替换操作。
8.问题:在Perl中如何使用循环结构?答案:Perl支持多种循环结构,如for、foreach、while等,可以根据需要选择合适的循环结构进行迭代操作。
9.问题:在Perl中如何定义和使用函数?答案:在Perl中,可以使用sub关键字定义函数,并使用&符号调用函数。
函数可以接受参数并返回值。
10.问题:请举一个使用Perl进行文本处理的例子?答案:例如,使用Perl提取一个文本文件中的特定行,可以根据行号或关键字进行提取。
具体实现可以使用open函数打开文件,并使用readline或readlines函数逐行读取文件内容,根据条件筛选出需要的行。
perl 正则表达式例题
perl 正则表达式例题Perl是一种流行的编程语言,它支持强大的正则表达式功能。
正则表达式是一种用来匹配字符串模式的工具,它可以帮助我们快速地查找、替换和提取文本中的信息。
在Perl中,我们可以使用正则表达式来完成各种字符串操作,下面我将通过一些例题来介绍Perl正则表达式的基本用法。
首先,让我们来看一个简单的例子。
假设我们有一个字符串“hello world”,现在我们想要匹配其中的“hello”这个单词。
在Perl中,我们可以使用=~/操作符来进行正则表达式匹配,如下所示:```perlmy $str = "hello world";if ($str =~ /hello/) {print "Matched\n";} else {print "Not matched\n";}```在上面的代码中,我们使用了“=~”操作符来判断$str字符串中是否包含“hello”这个单词。
如果匹配成功,则输出“Matched”,否则输出“Not matched”。
接下来,让我们来看一个稍复杂一点的例子。
假设我们有一个包含多个email 地址的字符串,现在我们想要提取其中的所有email地址。
在Perl中,我们可以使用正则表达式的“/(\w+@\w+\.\w+)/”模式来匹配email地址,如下所示:```perlmy$str="Email:***************,**************";my @emails = $str =~ /(\w+@\w+\.\w+)/g;foreach my $email (@emails) {print "$email\n";}```在上面的代码中,我们使用了“/(\w+@\w+\.\w+)/”模式来匹配email地址,并通过“/g”修饰符来获取所有匹配的email地址。
Perl语言入门习题
Perl语言入门习题_第四章1.[12]写一个名为&total 的子程序,返回一列数字的和。
提示:子程序不应当有任何的 I/O 操作;它处理调用的参数,返回处理后的值给调用者。
结合下面的程序来练习,它检测此子程序是否正常工作。
第一组数组之和我25。
2.[5]利用上题的子程序,写一个程序计算从 1 到1000的数字的和3.[18]额外的练习:写一个子程序,名为&above_average,将一列数字作为其参数,返回所有大于平均值的数字(提示:另外写一个子程序来计算平均值,总和除以数字的个数)。
#!/usr/bin/perluse strict;my@fred = qw{ 1 3 5 7 9 };my $fred_total = &total(@fred);print "The total of \@fred is $fred_total.\n";print "Enter some numbers on separate lines: ";my $user_total = &total(<STDIN>);print "The total of those numbers is $user_total.\n";sub total{my $sum;for(@_){$sum += $_;}return $sum;}#!/usr/bin/perluse strict;my @tmp = 1..1000;my $sum = &total(@tmp);print "total is : $sum.\n";sub total{my $sum;for(@_){$sum += $_;}return $sum;}#!/usr/bin/perluse strict;my @fred = &above_average(1..10);print "\@fred is @fred\n";print "(Should be 6 7 8 9 10)\n";my @barney = &above_average(100, 1..10); print "\@barney is @barney\n";print "(Should be just 100)\n";sub above_average{my $sum = &total(@_);my $average = $sum / @_;my @result;foreach(@_){if($_ > $average){push @result , $_ ;}}return @result;}sub total{my $sum;for(@_){$sum += $_;}return $sum;}----------------------------------------------------------------------------------Perl语言入门习题_第五章1.[7] 写一个程序,类似于cat,但保持输出的顺序关系。
Perl+习题答疑
Perl 习题(11)1 写一个程序,将一些字符串(不同的行)读入一个列表中,逆向输出它。
如果是从键盘输入的,那在Unix 系统中应当使用CTRL+D 表明end-of-file,在Windows 系统中使用CTRL+Z.(第3章习题)unless(@ARGV) {die "<input file> <output file>\n";}open(IN,"<$ARGV[0]") or die;my @line=<IN>;open(OUT,">$ARGV[1]") or die;foreach(reverse(@line)) {print OUT "$_";}2 写一个子程序,名为&above_average,将一列数字作为其参数,返回所有大于平均值的数字(提示:另外写一个子程序来计算平均值,总和除以数字的个数)。
利用下面的程序进行测试:(第4章习题)my @fred = &above_average(1..10);print "\@fred is @fred\n";print "(Should be 6 7 8 9 10)\n";my @barney = &above_average(100, 1..10);print "\@barney is @barney\n";print "(Should be just 100)\n";#!\usr\bin\perl -wuse strict;my @fred = &above_average(1..10);print "\@fred is @fred\n";print "(Should be 6 7 8 9 10)\n";my @barney = &above_average(100, 1..10);print "\@barney is @barney\n";print "(Should be just 100)\n";sub above_average{my @in=@_;my $average_value=&average(@in);my @out;foreach(@in) {if($_>$average_value){push @out,$_;}}return @out;}sub average {my @in=@_;my $sum=0;foreach(@in){$sum+=$_;}return $sum;}3 写一个程序,要求用户在不同的行中输入一些字符串,将此字符串打印出来,规则是:每一条占20 个字符宽度,右对齐。
Perl语言入门实战习题[试题]
Perl语言入门实战习题[试题] 《Perl语言入门实战习题》一、计算FASTA文件中每条序列的长度; 输入文件,FASTA格式:注:如果输入文件在windows下产生,在Linux系统下操作时,宜先用dos2unix处理:用法:dos2unix 输入文件输出文件:Perl代码:#!/usr/bin/perl -wuse strict;unless (@ARGV==2) { # @ARGV 传给脚本的命令行参数列表die"Usage: perl $0 <input.fa> <out.len>\n"; # 当命令行参数不是2的时候输出使用说明 }my ($infile,$outfile) = @ARGV; # 把命令行参数赋值给输入文件和输出文件 open IN,$infile || die"error: can't open infile: $infile"; # 打开输入文件句柄IN open OUT,">$outfile" || die$!; # 打开输出文件句柄OUT $/=">";<IN>; # 设置输入记录分隔符为”>”,并去除第一个”>”while ( my $seq = <IN>){ # 把序列ID行和序列赋值给$seqmy $id = $1 if($seq =~ /^(\S+)/); # 获取序列IDchomp $seq; # 去掉末尾的”>”$seq =~ s/^.+?\n//; # 删除第一行$seq =~ s/\s//g; # 删除序列中的空白字符my $len = length($seq); # 计算序列长度print OUT "$id\t$len\n"; # 输出结果到输出文件}$/="\n"; # 把输入记录分隔符改为默认值close IN; # 关闭输入文件句柄close OUT; # 关闭输出文件句柄二、计算FASTA文件中每条序列的GC含量; 输入文件同上,输出文件:Perl代码:#!/usr/bin/perl -wuse strict;unless (@ARGV==2) {# @ARGV 传给脚本的命令行参数列表die"Usage: perl $0 <input.fa> <out.gc>\n";# 当命令行参数不是2的时候输出使用说明}my ($infile,$outfile) = @ARGV;# 把命令行参数赋值给输入文件和输出文件open IN,$infile || die"error: can't open infile: $infile";# 打开输入文件句柄IN open OUT,">$outfile" || die$!;# 打开输出文件句柄OUT$/=">";<IN>;# 设置输入记录分隔符为”>”,并去除第一个”>” while(<IN>){# $_=<IN>,把序列ID行和序列赋值给$_,$_= 可以省略不写my $id = $1 if(/^(\S+)/);# 获取序列IDchomp; # 去掉末尾的”>”s/^.+?\n//;# 删除第一行s/\s//g; # 删除序列中的空白字符my $GC = (tr/GC/GC/);#计算G或C碱基个数my $AT = (tr/AT/AT/);#计算A或T碱基个数my $len = $GC + $AT;# 计算序列非N长度my $gc_cont = $len ? $GC / $len : 0; #计算GC含量,如果长度为0,GC含量算0print OUT "$id\t$gc_cont\n"; # 输出结果到输出文件 }$/="\n";# 把输入记录分隔符改为默认值close IN; # 关闭输入文件句柄close OUT;# 关闭输出文件句柄三、求反相互补序列;输入文件同上,输出文件也是FASTA格式 Perl代码:#!/usr/bin/perl -wuse strict;unless (@ARGV==2) {# @ARGV 传给脚本的命令行参数列表die"Usage: perl $0 <input.fa> <out.gc>\n";# 当命令行参数不是2的时候输出使用说明}my ($infile,$outfile) = @ARGV;# 把命令行参数赋值给输入文件和输出文件open IN,$infile || die"error: can't open infile: $infile";# 打开输入文件句柄IN open OUT,">$outfile" || die$!;# 打开输出文件句柄OUT $/=">";<IN>;# 设置输入记录分隔符为”>”,并去除第一个”>” while (<IN>){# $_=<IN>,把序列ID行和序列赋值给$_,$_= 可以省略不写my $id = $1 if(/^(\S+)/);# 获取序列IDchomp; # 去掉末尾的”>”s/^.+?\n//;# 删除第一行s/\s//g; # 删除序列中的空白字符$_ = reverse $_; # 序列方向tr/ATCG/TAGC/; # 序列互补print OUT ">$id\n",$_,"\n"; # 输出结果到输出文件}$/="\n";# 把输入记录分隔符改为默认值close IN; # 关闭输入文件句柄close OUT;# 关闭输出文件句柄四、列表信息整合;输入列表1:序列长度文件输入文件2:序列测序覆盖深度文件输出文件:把上述两个列表的信息整合成一个列表,并且最后一行给出汇总结果:Perl代码#!/usr/bin/perl -wuse strict;(@ARGV==3) || die"Usage: perl $0 <list1> <list2> <combine.list>\n"; # 当命令行参数不是3的时候输出使用说明my ($infile1,$infile2,$outfile) = @ARGV;# 把命令行参数赋值给输入文件1、输入文件2和输出文件 my %id_len; # 定义一个哈希open IN1,$infile1 || die$!; # 打开第一个文件句柄while(<IN1>){my ($id,$len) = split /\s+/,$_; # split函数用空白符号切割每一行的内容$id_len{$id} = $len; # 哈希赋值:id => length}close IN1; # 关闭第一个文件句柄open IN2,$infile2 || die$!; # 打开第2个文件句柄open OUT,">$outfile" || die$!; # 打开输出文件句柄my $tol_len = 0; # 定义总长度变量,并赋值为0my $tol_depth = 0; # 定义总深度变量,并赋值为0while (<IN2>){my ($id,$depth) = split; # split函数用空白符号切割每一行的内容my $len = $id_len{$id}; # 序列长度print OUT join("\t",$id,$len,$depth),"\n"; # 输出整合信息到输出文件$tol_len += $len; # 长度累加$tol_depth += $len * $depth; # 深度累加}$tol_depth /= $tol_len; # 计算总体平均深度print OUT "Total\t$tol_len\t$tol_depth\n"; # 输出汇总结果到输出文件close IN2; # 关闭第二个输入文件句柄close OUT; # 关闭输出文件句柄五、串流程;Perl在工作中常用于串流程,现有同事写了3个perl脚本分三步将输入文件,infile.txt处理成最终的final.result:第1步:perl step1.pl infile.txt output1 第2步:perl step2.pl infile.txt output2 第3步:perl step3.pl output1 output2 final.result为提高工作效率,现需要写一个脚本使用infile.txt 作为输入文件,直接得到final.result,中间产生的文件结果不保留。
perl常用实例
perl常用实例摘要:一、Perl 简介1.Perl 的起源和发展2.Perl 的优势和应用领域二、Perl 常用实例1.文本处理a.文件操作i.读取文件ii.写入文件iii.文件重定向b.字符串操作i.字符串替换ii.字符串分割iii.字符串连接c.正则表达式i.匹配字符串ii.替换字符串d.排序和排序算法i.升序排序ii.降序排序2.数组和列表a.创建数组和列表b.访问数组和列表元素c.修改数组和列表元素d.数组和列表的操作i.添加元素ii.删除元素iii.排序元素3.循环和条件语句a.for 循环b.while 循环c.if 条件语句d.unless 条件语句e.嵌套语句4.函数和模块a.定义函数b.调用函数c.模块的引入和使用5.文件和目录操作a.文件和目录的创建b.文件和目录的删除c.文件和目录的列表d.文件和目录的属性查询和修改正文:Perl 是一种高级、通用、功能强大的编程语言,起源于1987 年,由Larry Wall 开发。
Perl 具有强大的文本处理能力、优秀的正则表达式支持以及广泛的应用领域,如网络编程、系统管理、科学计算等。
在本文中,我们将通过一些常用的实例来展示Perl 在文本处理、数组和列表、循环和条件语句、函数和模块以及文件和目录操作方面的应用。
一、Perl 简介Perl 是一种解释型、动态数据类型的高级编程语言,其设计理念是“易读性、简洁性和实用性”。
Perl 的起源可以追溯到20 世纪80 年代,当时Larry Wall 在为Unix 系统开发一种文本处理工具,这便是Perl 的前身。
随着不断地发展和完善,Perl 逐渐成为了一种广泛应用的编程语言。
Perl 的优势在于其强大的文本处理能力、优秀的正则表达式支持以及广泛的应用领域。
Perl 可以用于网络编程、系统管理、科学计算、数据分析、自然语言处理等多个领域。
二、Perl 常用实例1.文本处理文本处理是Perl 的强项之一。
perl 正则表达式例题
perl 正则表达式例题(最新版)目录1.Perl 正则表达式的概念2.Perl 正则表达式的基本语法3.Perl 正则表达式的应用实例正文【1.Perl 正则表达式的概念】Perl 是一种高级脚本语言,被广泛应用于 Web 开发、数据处理和系统管理等领域。
在 Perl 中,正则表达式(Regular Expression,简称regex)是一种非常强大的文本处理工具,可以用来检查文本是否符合某种模式、提取文本中的特定信息等。
【2.Perl 正则表达式的基本语法】Perl 正则表达式的基本语法包括以下几种元素:1.字符类:用于匹配某一类字符- [abc]:匹配 a、b 或 c- [^abc]:匹配除方括号内字符以外的任意字符- d:匹配数字,等价于 [0-9]- D:匹配非数字,等价于 [^0-9]- s:匹配空白字符(空格、制表符、换行符等)- S:匹配非空白字符- w:匹配单词字符(字母、数字、下划线),等价于 [a-zA-Z0-9_] - W:匹配非单词字符2.量词:用于指定字符或字符类出现的次数-?:出现 0 次或 1 次- *:出现 0 次或多次- +:出现 1 次或多次- {n}:出现 n 次- {n,}:出现 n 次或多次- {n,m}:出现 n 到 m 次3.边界匹配符:用于指定匹配的位置- ^:匹配行的开始位置- $:匹配行的结束位置- b:匹配单词边界- B:匹配非单词边界4.分组和捕获:用于将正则表达式的一部分组合在一起,以便进行特定操作- (pattern):匹配 pattern 并捕获结果,可以通过1等引用- (?:pattern):匹配 pattern 但不捕获结果5.反斜杠():用于转义特殊字符或表示反斜杠本身【3.Perl 正则表达式的应用实例】假设我们有一个包含多个 URL 的文本,我们希望提取出所有的 URL 链接。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《Perl语言入门实战习题》一、计算FASTA文件中每条序列的长度;输入文件,FASTA格式:注:如果输入文件在windows下产生,在Linux系统下操作时,宜先用dos2unix处理:用法:dos2unix 输入文件输出文件:Perl代码:#!/usr/bin/perl -wuse strict;unless (@ARGV==2) { # @ARGV 传给脚本的命令行参数列表die"Usage: perl $0 <input.fa> <out.len>\n"; # 当命令行参数不是2的时候输出使用说明}my ($infile,$outfile) = @ARGV; # 把命令行参数赋值给输入文件和输出文件open IN,$infile || die"error: can't open infile: $infile"; # 打开输入文件句柄INopen OUT,">$outfile" || die$!; # 打开输出文件句柄OUT$/=">";<IN>; # 设置输入记录分隔符为”>”,并去除第一个”>”while ( my $seq = <IN>){ # 把序列ID行和序列赋值给$seqmy $id = $1 if($seq =~ /^(\S+)/); # 获取序列IDchomp $seq; # 去掉末尾的”>”$seq =~ s/^.+?\n//; # 删除第一行$seq =~ s/\s//g; # 删除序列中的空白字符my $len = length($seq); # 计算序列长度print OUT "$id\t$len\n"; # 输出结果到输出文件}$/="\n"; # 把输入记录分隔符改为默认值close IN; # 关闭输入文件句柄close OUT; # 关闭输出文件句柄二、计算FASTA文件中每条序列的GC含量;输入文件同上,输出文件:Perl代码:#!/usr/bin/perl -wuse strict;unless (@ARGV==2) {# @ARGV 传给脚本的命令行参数列表die"Usage: perl $0 <input.fa> <out.gc>\n";# 当命令行参数不是2的时候输出使用说明}my ($infile,$outfile) = @ARGV;# 把命令行参数赋值给输入文件和输出文件open IN,$infile || die"error: can't open infile: $infile";# 打开输入文件句柄INopen OUT,">$outfile" || die$!;# 打开输出文件句柄OUT$/=">";<IN>;# 设置输入记录分隔符为”>”,并去除第一个”>”while (<IN>){# $_=<IN>,把序列ID行和序列赋值给$_,$_= 可以省略不写my $id = $1 if(/^(\S+)/);# 获取序列IDchomp; # 去掉末尾的”>”s/^.+?\n//;# 删除第一行s/\s//g; # 删除序列中的空白字符my $GC = (tr/GC/GC/);#计算G或C碱基个数my $AT = (tr/AT/A T/);#计算A或T碱基个数my $len = $GC + $AT;# 计算序列非N长度my $gc_cont = $len ? $GC / $len : 0; #计算GC含量,如果长度为0,GC含量算0 print OUT "$id\t$gc_cont\n"; # 输出结果到输出文件}$/="\n";# 把输入记录分隔符改为默认值close IN; # 关闭输入文件句柄close OUT;# 关闭输出文件句柄三、求反相互补序列;输入文件同上,输出文件也是FASTA格式Perl代码:#!/usr/bin/perl -wuse strict;unless (@ARGV==2) {# @ARGV 传给脚本的命令行参数列表die"Usage: perl $0 <input.fa> <out.gc>\n";# 当命令行参数不是2的时候输出使用说明}my ($infile,$outfile) = @ARGV;# 把命令行参数赋值给输入文件和输出文件open IN,$infile || die"error: can't open infile: $infile";# 打开输入文件句柄INopen OUT,">$outfile" || die$!;# 打开输出文件句柄OUT$/=">";<IN>;# 设置输入记录分隔符为”>”,并去除第一个”>”while (<IN>){# $_=<IN>,把序列ID行和序列赋值给$_,$_= 可以省略不写my $id = $1 if(/^(\S+)/);# 获取序列IDchomp; # 去掉末尾的”>”s/^.+?\n//;# 删除第一行s/\s//g; # 删除序列中的空白字符$_ = reverse $_; # 序列方向tr/ATCG/TAGC/; # 序列互补print OUT ">$id\n",$_,"\n"; # 输出结果到输出文件}$/="\n";# 把输入记录分隔符改为默认值close IN; # 关闭输入文件句柄close OUT;# 关闭输出文件句柄四、列表信息整合;输入列表1:序列长度文件输入文件2:序列测序覆盖深度文件输出文件:把上述两个列表的信息整合成一个列表,并且最后一行给出汇总结果:Perl代码#!/usr/bin/perl -wuse strict;(@ARGV==3) || die"Usage: perl $0 <list1> <list2> <combine.list>\n";# 当命令行参数不是3的时候输出使用说明my ($infile1,$infile2,$outfile) = @ARGV;# 把命令行参数赋值给输入文件1、输入文件2和输出文件my %id_len; # 定义一个哈希open IN1,$infile1 || die$!; # 打开第一个文件句柄while(<IN1>){my ($id,$len) = split /\s+/,$_; # split函数用空白符号切割每一行的内容$id_len{$id} = $len; # 哈希赋值:id => length}close IN1; # 关闭第一个文件句柄open IN2,$infile2 || die$!; # 打开第2个文件句柄open OUT,">$outfile" || die$!; # 打开输出文件句柄my $tol_len = 0; # 定义总长度变量,并赋值为0my $tol_depth = 0; # 定义总深度变量,并赋值为0while (<IN2>){my ($id,$depth) = split; # split函数用空白符号切割每一行的内容my $len = $id_len{$id}; # 序列长度print OUT join("\t",$id,$len,$depth),"\n"; # 输出整合信息到输出文件$tol_len += $len; # 长度累加$tol_depth += $len * $depth; # 深度累加}$tol_depth /= $tol_len; # 计算总体平均深度print OUT "Total\t$tol_len\t$tol_depth\n"; # 输出汇总结果到输出文件close IN2; # 关闭第二个输入文件句柄close OUT; # 关闭输出文件句柄五、串流程;Perl在工作中常用于串流程,现有同事写了3个perl脚本分三步将输入文件,infile.txt处理成最终的final.result:第1步:perl step1.pl infile.txt output1第2步:perl step2.pl infile.txt output2第3步:perl step3.pl output1 output2 final.result为提高工作效率,现需要写一个脚本使用infile.txt 作为输入文件,直接得到final.result,中间产生的文件结果不保留。
#!/usr/bin/perl -wuse strict;unless (@ARGV==2) {# @ARGV 传给脚本的命令行参数列表die"Usage: perl $0 <infile> <out.result>\n";# 当命令行参数不是2的时候输出使用说明}my ($infile,$outfile) = @ARGV;# 把命令行参数赋值给输入文件和输出文件my $temp_file = “temp.$$”; # 临时文件,$$为进程号,这样可以保证文件名字的唯一性system“perl step1.pl $infile $temp.1perl step2.pl $infle $temp.2perl step3.pl $temp.1 $temp.2 $outfilerm $temp.1 $temp.2”#使用system调用3个perl脚本进行处理。